【问题标题】:C# MVC Rote custom configurationC# MVC Rote 自定义配置
【发布时间】:2015-10-27 16:35:11
【问题描述】:

我目前有:

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

【问题讨论】:

    标签: asp.net-mvc routes url-routing


    【解决方案1】:

    您的路线应如下所示:

        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 时,第一个路由将处理它。

    否则,如果您收到没有文化的路由,默认路由将处理它“硬编码”默认文化。

    【讨论】:

    • 但是你仍然可以拥有这些路由,MVC 将生成带有 www.site.com/en-US/ContactUs/Index 的 ActionLinks 路由它唯一的 HomeController,索引操作看起来像 www.site.com / 所有其他 URL 将在其中包含 en-US; www.site.com/en-US/ContactUs/Index
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-01-08
      • 2014-08-13
      • 2011-07-04
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      相关资源
      最近更新 更多