RazorPages 修改路由模板
Posted
技术标签:
【中文标题】RazorPages 修改路由模板【英文标题】:RazorPages modify routing template 【发布时间】:2021-03-03 20:34:30 【问题描述】:我在 .net 5.0 上使用 Razor 页面。我正在尝试找到一种方法来修改路由模板 URL 以将 ID 放置在路径的更高位置。
我正在构建的网站包含多个项目,我希望在 URL 中将 projectID 放在较高的位置,而页面特定的 ID 仍位于末尾。
默认情况下,我可以看到我可以将 /area (if exists)/folder/page/ID 作为路由结构,并且我可以合理地为特定页面添加更多 ID(即.../page/projectID/pageID) 通过在每个页面的 @page projectID:string/pageID:int? 声明中设置它。
我希望实现的是:
/projectID/area?/folder/page/ID
我可以查看我是否使用 MVC 约定我可以为 endpoints.MapControllerRoute 设置模式模板,但是我可以做些什么来使用 Razor 页面实现上述目标?
【问题讨论】:
看看创建自定义IPageRouteModelConvention
:learnrazorpages.com/advanced/custom-route-conventions
【参考方案1】:
在您的 Startup.cs 文件中,在 ConfigureServices 方法中找到以下行:
services.AddRazorPages();
将其替换为以下代码:
services.AddRazorPages()
.AddRazorPagesOptions(options =>
// for the pages of the Identity area
options.Conventions.AddAreaFolderRouteModelConvention("Identity", "/", model =>
foreach (var selector in model.Selectors)
var attributeRouteModel = selector.AttributeRouteModel;
attributeRouteModel.Template = AttributeRouteModel.CombineTemplates("projectID=1", attributeRouteModel.Template);
);
// for the default pages
options.Conventions.AddFolderRouteModelConvention("/", model =>
foreach (var selector in model.Selectors)
var attributeRouteModel = selector.AttributeRouteModel;
attributeRouteModel.Template = AttributeRouteModel.CombineTemplates("projectID=1", attributeRouteModel.Template);
);
);
这将导致在所有 url 前面添加一个路由值。除非您定义了一个,否则所有链接都将获得项目 ID 的值 1。
【讨论】:
以上是关于RazorPages 修改路由模板的主要内容,如果未能解决你的问题,请参考以下文章
使用 ASP NET Core 2.0 Razor 页面进行路由
Flask框架—— 反向解析配置信息路由系统模板请求响应闪现请求扩展session
如何在 Razor Pages 路由的开头添加应用程序名称?