Asp.net mvc C#MVC死记硬背自定义配置
我目前有:Asp.net mvc C#MVC死记硬背自定义配置,asp.net-mvc,routes,url-routing,Asp.net Mvc,Routes,Url Routing,我目前有: routes.MapRoute( name: "Default", url: "{culture}/{controller}/{action}/{id}", defaults: new { culture = "en-US", controller = "Home", action = "Index", id = UrlParameter.Optional } ); 这使得URL看起来像这样:
routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}/{id}",
defaults: new { culture = "en-US", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这使得URL看起来像这样:
www.site.com/en-US/ContactUs/Index
www.site.com/es/ContactUs/Index
我的问题是如何配置路由,以便当“文化”为“en-US”时,URL将如下所示:
www.site.com/ContactUs/Index
但当“culture”是“es”或任何其他文化(除en-US外)时,URL将如下所示(下面的示例是“es”文化):
www.site.com/es/ContactUs/Index您的路线应如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Culture",
url: "{culture}/{controller}/{action}/{id}",
defaults: new { culture = "en-US", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { culture="en-US", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
其思想是,当您收到带有区域性的URL时,第一条路由将处理它
否则,如果您收到没有区域性的路由,则默认路由将使用默认区域性进行“硬编码”。以下是我可以通过硬编码路由找到的最佳解决方案:
routes.MapRoute(
name: "SpanishCulture",
url: "es/{controller}/{action}/{id}",
defaults: new { culture = "es", controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new { culture = "es" }
);
routes.MapRoute(
name: "DefaultCulture",
url: "{controller}/{action}/{id}",
defaults: new { culture = "en-US", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
但有了这些路由,您仍然可以使用,MVC将生成带有www.site.com/en-US/ContactUs/Index-route的ActionLink。作为其唯一的HomeController,Index-action将看起来像www.site.com/所有其他URL中都包含en-US;www.site.com/en-US/ContactUs/Index