路由不起作用 - URL中的ASP.NET MVC 3本地化区域设置

时间:2012-08-23 15:17:17

标签: asp.net-mvc asp.net-mvc-3 localization internationalization routes

我正在根据路线数据本地化我的MVC3网站。例如,http://domain/fr应以法语显示网站,http://domain应默认为英文...以下是我在Global.ascx中注册路线的方式。

我的问题是http://domain/fr/Home/Index会起作用,但是http://domain/Home/Index会显示资源未找到错误,并通过调查告诉我路线表正在映射" Home"到{lang}

我错过了什么?

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

        routes.IgnoreRoute("favicon.ico");

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

        routes.MapRoute(
            "Localization", // Route name
            "{lang}/{controller}/{action}", // URL with parameters
            new { UrlParameter.Optional, controller = "Home", action = "Index"} // Parameter defaults
        );

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

    }

1 个答案:

答案 0 :(得分:2)

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}", // URL with parameters
            new { controller = "Home", action = "Index"}, // Parameter defaults
            new { controller = "[a-zA-Z]{3,}" } //regexp constraint on controller name
        );

routes.MapRoute(
            "Localization", // Route name
            "{lang}/{controller}/{action}", // URL with parameters
            new { UrlParameter.Optional, controller = "Home", action = "Index"} // Parameter defaults
        );

如果您的所有控制器名称都超过2个字符,应该这样做:)