NetCore Razor 路由伪静态设置

参考文档:

razor路由: https://www.learnrazorpages.com/razor-pages/routing

netcore 伪静态:https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/url-rewriting?view=aspnetcore-6.0#rrr

找到3中路由方式

1.program.cs 单一映射,其中伪静态2和3 会冲突,只能路由到一个页面

复制代码
复制代码

builder.Services.AddRazorPages().AddRazorPagesOptions(options => {
options.Conventions.AddPageRoute("/news/detail", "/news_{id}.html");//伪静态1
options.Conventions.AddPageRoute("/news/list", "/newslist_{id}.html"); //伪静态2
options.Conventions.AddPageRoute("/news/list", "/newslist_{id}_p{pageIndex}.html");//伪静态3
});

复制代码
复制代码

2.program.cs 页面路由模型约定,可以一对多路由,解决上面的冲突问题

复制代码
复制代码

//Razor路由映射
builder.Services.AddRazorPages().AddRazorPagesOptions(options => {
//一对多路径
options.Conventions.AddPageRouteModelConvention("/news/list", pm =>
{
var routes = new List<string>()
{
  "/newslist_{id:int}_p{pageIndex:int}.html",
  "/newslist_{id}.html"
};
int i = 0;
routes.ForEach(temp =>
{
  pm.Selectors.Add(new Microsoft.AspNetCore.Mvc.ApplicationModels.SelectorModel()
  {
  AttributeRouteModel = new Microsoft.AspNetCore.Mvc.ApplicationModels.AttributeRouteModel()
  {
    Order = i,
    Name = "news_list_" + i,
    Template = AttributeRouteModel.CombineTemplates("", temp)
  }
  });
i++;
});

});

});

复制代码
 
复制代码

3.net core Rewrite https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/url-rewriting?view=aspnetcore-6.0#rrr

引用Microsoft.AspNetCore.Rewrite

复制代码
复制代码

using (StreamReader apacheModRewriteStreamReader =
File.OpenText("ApacheModRewrite.txt"))
using (StreamReader iisUrlRewriteStreamReader =
File.OpenText("IISUrlRewrite.xml"))
{
  var options = new RewriteOptions()
  //.AddRedirect("redirect-rule/(.*)", "redirected/$1")
  //.AddRewrite(@"^rewrite-rule/(\d+)/(\d+)", "rewritten?var1=$1&var2=$2",skipRemainingRules: true)
  .AddApacheModRewrite(apacheModRewriteStreamReader)
  .AddIISUrlRewrite(iisUrlRewriteStreamReader)
  .Add(MethodRules.RedirectXmlFileRequests)
  .Add(MethodRules.RewriteTextFileRequests);
  app.UseRewriter(options);
}

复制代码
复制代码

附:IISUrlRewrite.xml

复制代码
复制代码

<rewrite>
<rules>
<rule name="news_detail_id_typeid" stopProcessing="true">
<match url="^news_(.*)_t(.*).html$" />
<action type="Rewrite" url="/news/detail?id={R:1}&amp;typeId={R:2}" appendQueryString="false"/>
</rule>
<rule name="Rewrite segment to id querystring" stopProcessing="true">
<match url="^news_(.*).html$" />
<action type="Rewrite" url="/news/detail?id={R:1}" appendQueryString="false"/>
</rule>
</rules>
</rewrite>

复制代码

 

posted on   kobe  阅读(303)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示