ASP.NET Core 2.2剃须刀页面中的自定义路由

问题描述 投票:0回答:1

我在ASP.NET Core 2.2应用程序中无法为Razor页面设置路由约定(我正在从传统的MVC迁移到Razor页面)。

我正在使用文档中建议的标准Pages文件夹结构,但我想稍微自定义生成的路由。

例如,在Products文件夹中的Details.cshtml页面上,我具有以下指令:

@page "{id:int}

此页面的URL为:

/Products/Details/42

但是我希望该URL为:

/Products/42

我希望这在全球范围内适用,而不仅仅是在“产品详细信息”页面上。该文档对此并不特别清楚。

asp.net routing razor-pages asp.net-core-2.2
1个回答
0
投票

所以这似乎是这样做的方法:

https://www.mikesdotnetting.com/article/327/customising-routing-conventions-in-razor-pages

  1. 创建实现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);
        }
    }
}
  1. Startup.cs中注册课程:
services
    .AddMvc()
    .AddRazorPagesOptions(o =>
    {
        o.Conventions.Add(new CustomPageRouteModelConvention());
    });

与旧的MVC相比,这似乎是一项巨大的工作,但是我可以看到,它可以实现更好的控制。

© www.soinside.com 2019 - 2024. All rights reserved.