由于我是 ASP.NET Core 中 Razor Pages 概念的新手,我想应用通用 URL 将区域性参数传递给路由
我已经使用 MVC 做到了,但我也想将它应用于 Razor 页面 这是我在 MVC 中所做的以及根据需要进行的工作
routes.MapRoute(
name: "default",
template: "{culture}/{controller=Home}/{action=Index}/{id?}");
我已经将它应用到特定页面并且它也可以工作
options.Conventions.AddPageRoute("/RealEstate/Index", "{culture}/RealEstate");
但是当我想申请所有页面时它不起作用,我不知道应该作为 PageName 传递什么
options.Conventions.AddPageRoute("*", "{culture}/{*url}");
我还想将此约定中的 admin 文件夹排除为 siteName.com/admin 而不是 en-US/Admin 我还需要在用户第一次打开站点时在 URL 中设置默认文化,例如例如成为 siteName.com 并加载默认文化,甚至默认加载 siteName.com/en-US
谢谢。
最佳答案
您可以使用 AddFolderRouteModelConvention
将路由模型约定应用于文件夹.文档有 example关于如何做到这一点,我已经为您的目的采取并修改了:
options.Conventions.AddFolderRouteModelConvention("/", model =>
{
foreach (var selector in model.Selectors)
{
selector.AttributeRouteModel = new AttributeRouteModel
{
Order = -1,
Template = AttributeRouteModel.CombineTemplates(
"{culture}",
selector.AttributeRouteModel.Template),
};
}
});
这会将约定应用于所有页面,因为 "/"
设置为文件夹,因此适用于根级别。这不是像我链接的示例中那样添加新的选择器,而是修改现有的选择器以预先添加 {culture}
标记,您可以在页面中按名称访问它,例如:
public void OnGet(string culture)
{
// ...
}
如果我们添加一个 new 选择器,无论有无文化,页面都可以访问,使其成为可选的。使用我展示的方法,需要 {culture}
token ,如 OP 中所示。
关于c# - 更改 ASP.NET Core Razor 页面中的默认路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698799/