ASP.NET Core 2.2 Razor 页面中的自定义路由
Posted
技术标签:
【中文标题】ASP.NET Core 2.2 Razor 页面中的自定义路由【英文标题】:Custom Routing in ASP.NET Core 2.2 Razor Pages 【发布时间】:2020-05-06 09:11:47 【问题描述】:我在为 ASP.NET Core 2.2 应用程序中的 Razor Pages 设置路由约定时遇到问题(我正在从传统 MVC 迁移到 Razor Pages)。
我正在使用文档中推荐的标准 Pages 文件夹结构,但我想稍微自定义生成的路由。
例如,在 Products 文件夹中的 Details.cshtml 页面上,我有以下指令:
@page "id:int
此页面的网址是:
/Products/Details/42
但是我希望 URL 是:
/Products/42
我希望它在全球范围内适用,而不仅仅是在“产品详细信息”页面上。文档对此并不是特别清楚。
【问题讨论】:
检查这个:- ***.com/questions/37683121/… 那个是Controller/Action路由,不是Pages 【参考方案1】:所以这似乎是这样做的方法:
https://www.mikesdotnetting.com/article/327/customising-routing-conventions-in-razor-pages
-
创建一个实现
IPageRouteModelConvention
的类:
public class CustomPageRouteModelConvention : IPageRouteModelConvention
public void Apply(PageRouteModel model)
foreach (var selector in model.Selectors.ToList())
var template = selector.AttributeRouteModel.Template;
if (template.EndsWith("Details/id:int", StringComparison.OrdinalIgnoreCase))
selector.AttributeRouteModel.Template = template.Replace("Details/id:int", "id:int", StringComparison.OrdinalIgnoreCase);
-
在
Startup.cs
注册课程:
services
.AddMvc()
.AddRazorPagesOptions(o =>
o.Conventions.Add(new CustomPageRouteModelConvention());
);
与旧的 MVC 方式相比,这似乎是一项巨大的工作,但我可以看到它允许更精细的控制。
【讨论】:
【参考方案2】:你需要覆盖整个路由,所以这就是你需要的 -
@page "/Products/id:int"
【讨论】:
以上是关于ASP.NET Core 2.2 Razor 页面中的自定义路由的主要内容,如果未能解决你的问题,请参考以下文章
IIS 部署不能包含 asp.net core 2.2 razor 页面中 wwwroot 文件夹的文件
Asp .Net Core 2.2 Razor Pages Ajax Call Post 不工作
如何在asp.net core razor pages 2.2中设置日期格式和文化
Asp.Net Core 上的 Razor 页面 - 添加了 Razor 页面但无法让页面显示