首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AddRazorPagesOptions Conventions.AddPageRoute中的野猫

AddRazorPagesOptions Conventions.AddPageRoute中的野猫
EN

Stack Overflow用户
提问于 2018-04-07 16:40:06
回答 1查看 463关注 0票数 2

我有这样的代码:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services
        .AddMvc()
        .AddRazorPagesOptions(options => {
            options.Conventions.AddPageRoute("/Index", "Index.html");
            options.Conventions.AddPageRoute("/rt", "rt.html");
        });
}

难道不是写每一页,而是有这样一条通配符路径吗?

代码语言:javascript
复制
options.Conventions.AddPageRoute("/*", "/{*.html}");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-08 16:37:26

没有内置的方式来添加这样的通配符路由。但是,您可以通过简单的页面路由约定(IPageRouteModelConvention的实现)来实现它。下面是一个工作示例:

代码语言:javascript
复制
public class HtmlExtensionPageRouteModelConvention : IPageRouteModelConvention
{
    public void Apply(PageRouteModel model)
    {
        var selectorCount = model.Selectors.Count;
        for (var i = 0; i < selectorCount; ++i)
        {
            var attributeRouteModel = model.Selectors[i].AttributeRouteModel;
            if (String.IsNullOrEmpty(attributeRouteModel.Template))
            {
                continue;
            }

            attributeRouteModel.SuppressLinkGeneration = true;
            model.Selectors.Add(new SelectorModel
            {
                AttributeRouteModel = new AttributeRouteModel
                {
                    Template = $"{attributeRouteModel.Template}.html",
                }
            });
        }
    }
}

配置:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services
        .AddMvc()
        .AddRazorPagesOptions(options => {
            options.Conventions.Add(new HtmlExtensionPageRouteModelConvention());
        });
}

Sample Project on GitHub

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49709615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档