0

我正在根据路由数据本地化我的 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
        );

    }
4

1 回答 1

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 个字符 :)

于 2012-08-23T15:29:15.183 回答