c# - RazorPages 修改路由模板
问题描述
我在 .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 页面实现上述目标?
解决方案
在 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。
推荐阅读
- c# - 垃圾收集器 - 我声明静态列表时的行为
- drake - Drake URDF:多关节单传动
- flask - 使用不同的数据库进行开发与生产 Flask
- python - 仅将列名和`_`添加到特定列中的每个值
- r - R如果值落在向量中的范围之间,则分配多个类(简单方式)
- c++ - Makefile 中隐式规则中的 -c 标志错误
- c - 什么是在 C 中解析二进制文件的高效且干净的方法?
- jsonschema - "$ref": "#" 是什么意思?
- powershell - 将 power-shell 命令输出到在 if else 语句中不起作用的变量
- php - 变量未定义 使用视图编辑器后在刀片模板中使变量可选