Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改ASP.NET核心页面中的默认路由_C#_Asp.net Mvc_Asp.net Core_Razor Pages - Fatal编程技术网

C# 更改ASP.NET核心页面中的默认路由

C# 更改ASP.NET核心页面中的默认路由,c#,asp.net-mvc,asp.net-core,razor-pages,C#,Asp.net Mvc,Asp.net Core,Razor Pages,由于我不熟悉ASP.NET核心中的Razor Pages概念,我想应用一个通用URL将区域性参数传递给路由 我已经用MVC实现了这一点,但我也想将其应用于Razor页面 以下是我在MVC中所做的工作及其所需的工作 routes.MapRoute( name: "default", template: "{culture}/{controller=Home}/{action=Index}/{id?}"); 我已经

由于我不熟悉ASP.NET核心中的Razor Pages概念,我想应用一个通用URL将区域性参数传递给路由

我已经用MVC实现了这一点,但我也想将其应用于Razor页面 以下是我在MVC中所做的工作及其所需的工作

  routes.MapRoute(
                    name: "default",
                    template: "{culture}/{controller=Home}/{action=Index}/{id?}");
我已经将其应用于特定的页面及其工作

   options.Conventions.AddPageRoute("/RealEstate/Index", "{culture}/RealEstate");
但当我想申请所有页面时,它不起作用,我不知道应该将什么作为页面名传递

 options.Conventions.AddPageRoute("*", "{culture}/{*url}");
此外,我想将admin文件夹从该约定中排除为siteName.com/admin,而不是en-US/admin。此外,当用户首次打开站点时,我需要在URL中设置默认区域性,例如,将其设置为siteName.com并加载默认区域性,甚至默认情况下加载siteName.com/en-US


谢谢。

您可以使用将路由模型约定应用于文件夹。这些文档有一个关于如何做到这一点的详细说明,我为您的目的对其进行了修改:

options.Conventions.AddFolderRouteModelConvention(“/”,model=>
{
foreach(model.Selectors中的var选择器)
{
selector.AttributeRouteModel=新的AttributeRouteModel
{
顺序=-1,
模板=AttributeRouteModel.CombineTemplates(
“{文化}”,
selector.AttributeRootModel.Template),
};
}
});
这将对所有页面应用约定,因为
“/”
被设置为文件夹,因此适用于根级别。这并不是像我链接的示例中那样添加新的选择器,而是修改现有选择器以预先添加
{culture}
标记,您可以通过名称在页面中访问该标记,例如:

public void OnGet(字符串区域性)
{
// ...
}

如果我们添加了一个新的选择器,那么无论是否使用文化,页面都可以访问,这使得它成为可选的。使用我展示的方法,需要
{culture}
令牌,如操作中所示。

感谢Kirk Larkin的帮助

我使用了他的答案,并添加了一个小的修改,将Admin从区域性路由中排除,并在没有选择区域性时为网站设置默认区域性

options.Conventions.AddFolderRouteModelConvention("/", model =>
                   {
                       foreach (var selector in model.Selectors)
                       {
                           if (selector.AttributeRouteModel.Template.StartsWith("Admin"))
                           {
                               selector.AttributeRouteModel = new AttributeRouteModel
                               {
                                   Order = -1,
                                   Template =
                                       selector.AttributeRouteModel.Template,
                               };
                           }
                           else
                           {
                               selector.AttributeRouteModel = new AttributeRouteModel
                               {
                                   Order = -1,
                                   Template = AttributeRouteModel.CombineTemplates(
                                       "{culture=en-US}",
                                       selector.AttributeRouteModel.Template),
                               };
                           }

                       }
                   });

您是如何修复默认语言的?这行模板=AttributeRouteModel.CombineTemplates({culture=en US})对我不起作用。