更改ASP.NET Core Razor页面中的默认登录页面?

时间:2019-05-28 10:24:17

标签: asp.net-core .net-core razor-pages asp.net-core-2.2 asp.net-core-routing

我尝试过:

services.AddMvc().AddRazorPagesOptions(options =>
{
    options.Conventions.AddPageRoute("/Index", "old");
    options.Conventions.AddPageRoute("/NewIndex", "");
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

抛出此异常:

  

AmbiguousMatchException:该请求匹配了多个端点。   匹配项:

     

页面:/ Index

     

页面:/ NewIndex

我发现this表示建议重命名“索引”页面,但显然,即使不是很好的理由,也可以解决。我不能只更改默认页面而不重命名/ Index页面吗?

1 个答案:

答案 0 :(得分:0)

“剃刀页面”中的默认页面是为其生成了空字符串路由模板的页面。您可以使用自定义PageRouteModelConvention删除为 Index.cshtml 页面生成的空字符串路由模板,然后将其添加到您想要作为默认页面的任何页面上:

public class HomePageRouteModelConvention : IPageRouteModelConvention
{
    public void Apply(PageRouteModel model)
    {
        if(model.RelativePath == "/Pages/Index.cshtml")
        {
            var currentHomePage = model.Selectors.Single(s => s.AttributeRouteModel.Template == string.Empty);
            model.Selectors.Remove(currentHomePage);
        }

        if (model.RelativePath == "/Pages/NewIndex.cshtml")
        {
            model.Selectors.Add(new SelectorModel()
            {
                AttributeRouteModel = new AttributeRouteModel
                {
                    Template = string.Empty
                }
            });
        }
    }
}

您在ConfigureServices中注册约定:

services.AddMvc().AddRazorPagesOptions(options =>
{
    options.Conventions.Add(new HomePageRouteModelConvention());
}).SetCompatibilityVersion(CompatibilityVersion.Latest);

您可以在此处了解有关自定义页面路由模型约定的更多信息:https://www.learnrazorpages.com/advanced/custom-route-conventions