Проблема с глобализацией маршрутов ASP.NET MVC - PullRequest
0 голосов
/ 08 февраля 2010

Я пытался использовать решение, описанное в 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" }
    );

Но все равно ошибка 404 для / en / admin - (в этом случае "/ admin" работает.)

Есть идеи?

1 Ответ

0 голосов
/ 09 февраля 2010

У меня очень похожий шаблон маршрута на моем собственном сайте MVC.

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

Я вижу два основных различия в том, что я указываю {action} в моем маршруте, а также вызываю первый параметр маршрута в качестве параметра в моем объекте ("blogSubFolder =" ",").

Теперь я только что провел некоторое тестирование и обнаружил то же поведение, которое вы видите, я убираю {действие} из своего маршрута и получаю 404. Но если я укажу действие, все сработает.

Хорошо, я создал новый проект с маршрутом по умолчанию, и мне не нужно указывать действие, по умолчанию используется индекс, как я и ожидал. Затем я добавляю новый маршрут, в котором я указываю контроллер {language} / Foo / {action}, и продолжаю получать ошибки, если я не включаю индекс в свой URL. Короче говоря, насколько я могу судить, если у вашего маршрута есть переменная, предшествующая контроллеру, вы должны указать действие в своем URL.

...