asp.net-core - 更改 ASP.NET Core Razor 页面中的默认登录页面?
问题描述
我试过:
services.AddMvc().AddRazorPagesOptions(options =>
{
options.Conventions.AddPageRoute("/Index", "old");
options.Conventions.AddPageRoute("/NewIndex", "");
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
抛出此异常:
AmbiguousMatchException:请求匹配多个端点。火柴:
页:/索引
页面:/新索引
我发现了这个,它建议重命名索引页面,但很明显,如果不是一个很好的理由,它是一种解决方法。我不能只更改默认页面而不重命名 /Index 页面吗?
编辑
建议的 SO 线程不涵盖我解释的问题,即覆盖默认路由而无需重命名默认Index
页面。接受的答案解决了这个问题。
解决方案
Razor 页面中的默认页面是那些为其生成了空字符串路由模板的页面。您可以使用自定义删除为Index.cshtmlPageRouteModelConvention
页面生成的空字符串路由模板,并将其添加到您希望作为默认页面的任何页面:
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
推荐阅读
- javascript - Rails 6 (webpack) 内联 Javascript:参考asset_pack_tag
- c - 函数大小,包括其他部分中的静态数据
- typescript - 检查json属于哪个扩展接口
- android - 每当我输入 flutter run、flutter doctor 或任何其他 cmd 时,它都会给我这个错误:
- javascript - 国际电话输入“grunt img”命令不起作用
- javascript - 对 Python (Django) 中的“点击事件”做出反应
- c# - 我在 .net5 api 应用程序中有两个具有一对多关系的模型。子模型包含 IFormFile 属性。我无法绑定此属性
- encoding - pdftotext.exe 文件路径中的非 ASCII 字符问题
- javascript - 如何使用 Moment js 检索最近的 {day of the week}?
- restsharp - 将 RestSharp Api 客户端从 .Net 4.7.2 转换为 .Net Core 5.0 后获取未经授权的请求