參考文檔:
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}&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>