c# - 更改 ASP.NET Core Razor 页面中的默认路由

标签 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?}");

我已经将它应用到特定页面并且它也可以工作

   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/

相关文章:

c# - 命名管道创建时所有实例都忙异常

c# - 模数运算如何与 float 数据类型一起使用?

asp.net-mvc - 如何在 asp.net mvc 中使用 html helper 创建只读文本?

c# - 在运行时在 ASP.Net Core 中安装新的中间件

Azure 表未将属性加载到对象中

c# - 克隆 AJAX TabPanel

c# - Unity IMGUI - ArgumentException : Getting control's position when doing MouseDown - OnGUI Events

c# - 403.14 - 在 IIS 中 Controller 名称和 Controller 目录名称相同时禁止访问

javascript - 在foreach循环中解析jquery中的json数组

c# - 在 Azure SQL 数据库中插入/更新/删除新记录时将更新推送到 SignalR 流中