C# MVC 死记硬背自定义配置

C# MVC Rote custom configuration

我目前有:

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

我的问题是如何配置路由,以便当 "culture" 为 "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 时,第一条路线将处理它。

否则,如果您收到没有文化的路由,默认路由会处理它 "hard coding" 默认文化。

这是我可以通过基本的硬编码路线得出的最佳解决方案:

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 }
        );