首页 > 解决方案 > 通过调用以 .cshtml 结尾的页面进行 Razor 路由

问题描述

Razor 将来自“/mypage”的请求路由到文件“mypage.cshtml”但是直接通过“/mypage.cshml”调用网页不会重定向到该文件。相反,它会抛出 404 错误。

是否可以额外配置此行为?这样就可以通过调用 mypage.cshtml 文件

标签: asp.net-corerazor

解决方案


这是一个工作演示,如下所示:

1.自定义模型约定:

public class GlobalTemplatePageRouteModelConvention: IPageRouteModelConvention
{
    public void Apply(PageRouteModel model)
    {
        var selectorCount = model.Selectors.Count;
        for (var i = 0; i < selectorCount; i++)
        {
            var selector = model.Selectors[i];
            model.Selectors.Add(new SelectorModel
            {
                AttributeRouteModel = new AttributeRouteModel
                {
                    Order = 1,
                    Template = selector.AttributeRouteModel.Template+".cshtml",
                }
            });
        }
    }
}

2.在Startup.csGlobalTemplatePageRouteModelConvention中注册:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages().AddRazorPagesOptions(options =>
    {
        options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());

    });
    //...
}

结果:

在此处输入图像描述

参考:

https://docs.microsoft.com/en-us/aspnet/core/razor-pages/razor-pages-conventions?view=aspnetcore-3.1#model-conventions


推荐阅读