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