【问题标题】:Problem with globalization of ASP.NET MVC routesASP.NET MVC 路由全球化的问题
【发布时间】:2010-02-08 14:06:10
【问题描述】:

我尝试使用http://weblogs.asp.net/paulomorgado/archive/2010/01/31/web-site-globalization-with-asp-net-routing.aspx 中解释的解决方案,使用路由中的语言参数本地化我的应用程序。

这是我在 Global.asax 中的代码:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.Add("en", new Route("en/{*path}", new GlobalizationRouteHandler(CultureInfo.GetCultureInfo("en-US"))));
        routes.Add("fa", new Route("fa/{*path}", new GlobalizationRouteHandler(CultureInfo.GetCultureInfo("fa-IR"))));

        routes.MapRoute(
            "AdminHome",
            "{language}/admin",
            new { controller = "Admin", action = "Index" }
        );

    }

但是当我将浏览器指向 /en/admin 或 /fa/admin 时,我会收到 404 错误消息。

我也试过这个:

routes.MapRoute(
        "AdminHome",
        "admin",
        new { controller = "Admin", action = "Index" }
    );

但 /en/admin 仍然出现 404 错误 - (在这种情况下“/admin”有效。)

有什么想法吗?

【问题讨论】:

  • 我从编写原始代码的人那里得到了一些指导,他建议我在 GlobalizationRouteHandler 之前编写我的路由规则。我没有尝试,因为我使用了另一种方法。你可以测试它并告诉我们结果;)

标签: asp.net asp.net-mvc localization globalization


【解决方案1】:

我在自己的 MVC 站点中有一个非常相似的路由模式。

            routes.MapRoute(
            "BlogSpecific",                                              // Route name
            "{blogSubFolder}/{controller}/{action}",                           // URL with parameters
            new { blogSubFolder = "", controller = "", action = "Index" }  // Parameter defaults
        );

我可以看到的两个主要区别是我在我的路由中指定了 {action},并且我还将第一个路由参数作为我的对象中的参数 ("blogSubFolder = "",") 调用。

现在我刚刚做了一些测试,发现了与您看到的相同的行为,我从路由中取出 {action} 并得到 404。但如果我指定了操作,一切都会正常进行。

好的,所以我创建了一个新项目,使用默认路由,我不必指定操作,它默认为 Index,就像我期望的那样。然后我添加一个新路由,在其中指定控制器 {language}/Foo/{action},如果我的 url 中没有包含索引,我会继续收到错误。长话短说,据我所知,如果您的路线在控制器之前有一个变量,您必须在您的 url 中指定操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-13
    • 2011-11-30
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多