C# RazorPages修改路由模板
我正在使用.NET5.0上的Razor页面。我正试图找到一种方法来修改路由模板URL,以便在路径上方放置一个ID 我正在构建的站点运行着多个项目,我希望projectID在URL中处于较高的位置,页面特定的ID仍然在最后 默认情况下,我可以看到我可以将/{area(如果存在)}/{folder}/{page}/{ID}作为路由结构,并且我可以通过在每个页面的@page{projectID:string}/{pageID:int?}说明中设置,合理地为特定页面添加更多ID(即../{page}/{projectID}/{pageID}) 我希望实现的是: /{projectID}/{area?}/{folder}/{page}/{ID}C# RazorPages修改路由模板,c#,.net-core,routes,razor-pages,C#,.net Core,Routes,Razor Pages,我正在使用.NET5.0上的Razor页面。我正试图找到一种方法来修改路由模板URL,以便在路径上方放置一个ID 我正在构建的站点运行着多个项目,我希望projectID在URL中处于较高的位置,页面特定的ID仍然在最后 默认情况下,我可以看到我可以将/{area(如果存在)}/{folder}/{page}/{ID}作为路由结构,并且我可以通过在每个页面的@page{projectID:string}/{pageID:int?}说明中设置,合理地为特定页面添加更多ID(即../{page}/{
我可以看出,如果我使用的是MVC约定,我可以为endpoints.MapControllerRoute设置一个模式模板,但是我可以通过Razor页面实现上述目标吗?在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,除非您定义了一个值。在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,除非您定义了值。查看创建自定义
IPageRouteModelConvention
:查看创建自定义IPageRouteModelConvention
: