ASP.NET MVC — странная проблема маршрутизации, очень простая проблема несоответствия маршрутов

Я в растерянности... вот мой маршрут:

routes.MapRoute("LangOnly", "{language}",
    new { controller = "Home", action = "Root", language = "en" },
    new { language = @"en|ja" });

он соответствует www.domain.com/en, но не соответствует www.domain.com/ja.

Хм? Я даже зашел так далеко, что прокомментировал любые другие маршруты... как-то застрял. ;/

Обновление: вот корневое действие на домашнем контроллере.

[CompressFilter]
public ActionResult Root()
{
    if (!IsEnglish)
        return RedirectToAction("Index", "Biz", new { b = "" });

    return Request.IsAuthenticated ? View("LoggedInRoot") : View("Root");
}

Он не принимает параметр языка, потому что он устанавливается на базовом контроллере в OnActionExecuting, например:

    var l = (RouteData.Values["language"] != null) ? RouteData.Values["language"].ToString() : string.Empty;

    if (string.IsNullOrEmpty(l))
        l = "en";

    if (l.Contains("en"))
    {
        IsEnglish = true;
        l = "en";
    }
    else
    {
        IsEnglish = false;
        l = "ja";
    }

    ViewData["lang"] = l.ToLower();
    Language = l.ToLower();

person Chaddeus    schedule 25.07.2009    source источник
comment
Вы пробовали отладчик маршрутов Haacked? haacked.com/archive/2008/03/13/url- маршрутизация-debugger.aspx   -  person eu-ge-ne    schedule 25.07.2009
comment
У вас есть маршруты выше этого?   -  person eu-ge-ne    schedule 25.07.2009
comment
Я только что проверил его с помощью отладчика маршрутов (спасибо за ссылку), он говорит, что это соответствует... wth?   -  person Chaddeus    schedule 25.07.2009
comment
В этом случае опубликуйте свой код HomeController.Root(), пожалуйста   -  person eu-ge-ne    schedule 25.07.2009
comment
омг... сумасшедший. это перенаправление не соответствует маршруту. Я тупой! ржу не могу. Спасибо за помощь.   -  person Chaddeus    schedule 25.07.2009


Ответы (1)


Отлично работает для меня с вашим маршрутом. Попробуйте эту простую конфигурацию:

routes.MapRoute("LangOnly", "{language}",
                new {controller = "Home", action = "Index", language = "en"},
                new {language = @"en|ja"});


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

И ваше действие:

public ActionResult Index(string language)
{
.....

(Я использую «Index» в качестве действия здесь, очевидно, измените его на «Root», если это на самом деле ваше имя действия.)

person GONeale    schedule 25.07.2009
comment
обнаружил ошибку, перенаправление на действие home/root не совпадало. фу. Спасибо! - person Chaddeus; 25.07.2009