ASP.NET MVC路由全球化的问题

时间:2010-02-08 14:06:11

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

我尝试使用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”有效。)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我在自己的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中包含索引,我会继续收到错误。长话短说,尽管我可以判断你的路线是否有一个在控制器之前的变量,你必须在你的网址中指定动作。