Не могу понять, почему этот маршрут MVC2 не работает - PullRequest
0 голосов
/ 09 сентября 2010

Я пытаюсь создать маршрут ASP.NET MVC2 с ограничением регулярного выражения для фильтрации имен языков (например, en-us, pt-br), но, к сожалению, это не работает.Посмотрите:

routes.MapRoute(
    "Culture", // Route name
    "{culture}", // URL with parameters
    new { controller = "Home", action = "Culture" }, // Parameter defaults
    new { culture = @"^[a-z]{2}-[a-z]{2}$" }
);

У кого-нибудь есть идеи?

Редактировать: URL, который я тестирую, http://localhost/en-us

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

возможно, чувствителен к регистру?

"en-US"

Так что вам нужно:

new { culture = @"^[a-z]{2}-[A-Z]{2}$" }

Но используйте это, чтобы сделать его нечувствительным к регистру:

new { culture = @"^[a-zA-Z]{2}-[a-zA-Z]{2}$" }
0 голосов
/ 09 сентября 2010

Я не знаю, почему это не работает в вашем случае, но вот что работает:

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

    routes.MapRoute(
        "Culture",
        "{culture}",
        new { controller = "Home", action = "Culture" },
        new { culture = @"^[a-z]{2}-[a-z]{2}$" }
    );

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Culture(string culture)
    {
        return View();
    }
}

URL: http://example.com/en-us успешно вызывает действие Culture для HomeController и передает en-us в параметре культуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...