Ahm*_*ano 3 c# asp.net-mvc asp.net-core razor-pages
由于我是 ASP.NET Core 中的 Razor Pages 概念的新手,我想应用一个通用 URL 将文化参数传递给路由
我已经使用 MVC 做到了这一点,但我也想将它与 Razor 页面一起应用,这是我在 MVC 中所做的工作,并根据需要进行工作
routes.MapRoute(
name: "default",
template: "{culture}/{controller=Home}/{action=Index}/{id?}");
Run Code Online (Sandbox Code Playgroud)
我已经将它应用于特定的 Page 并且它也能正常工作
options.Conventions.AddPageRoute("/RealEstate/Index", "{culture}/RealEstate");
Run Code Online (Sandbox Code Playgroud)
但是当我想申请所有页面时它不起作用,我不知道应该作为 PageName 传递什么
options.Conventions.AddPageRoute("*", "{culture}/{*url}");
Run Code Online (Sandbox Code Playgroud)
我还想从这个约定中排除 admin 文件夹是 siteName.com/admin 而不是 en-US/Admin 我还需要在用户第一次打开网站时在 URL 中设置默认文化,例如是 siteName.com 并加载默认文化,甚至默认加载 siteName.com/en-US
谢谢。
您可以使用 将路线模型约定应用于文件夹AddFolderRouteModelConvention。文档有一个如何执行此操作的示例,我已根据您的目的对其进行了修改:
options.Conventions.AddFolderRouteModelConvention("/", model =>
{
foreach (var selector in model.Selectors)
{
selector.AttributeRouteModel = new AttributeRouteModel
{
Order = -1,
Template = AttributeRouteModel.CombineTemplates(
"{culture}",
selector.AttributeRouteModel.Template),
};
}
});
Run Code Online (Sandbox Code Playgroud)
这将约定应用于所有页面,因为它"/"被设置为文件夹,因此适用于根级别。与我链接的示例中的添加新选择器不同,这会修改现有选择器以添加{culture}令牌,您可以在页面中按名称访问该令牌,例如:
public void OnGet(string culture)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果我们添加了一个新的选择器,无论有没有文化,页面都可以访问,使其成为可选的。使用我展示的方法,{culture}需要令牌,如 OP 中所示。
| 归档时间: |
|
| 查看次数: |
5498 次 |
| 最近记录: |