(ASP MVC4) Маршрутизация атрибутов/RedirectToRoute

Мне нужна небольшая помощь в том, чего я пытаюсь достичь. Я делаю приложение ASP MVC и не могу правильно проложить маршруты.

Я использую маршрутизацию атрибутов пакета nuget (которая теперь по умолчанию используется в MVC5).

Сначала у меня не было никаких проблем с использованием всех маршрутов, где правильно сопоставлялись нужные вещи, но потом я начал работать над интернационализацией, и все взорвалось!

Итак, вот проблема:

Мне нужно получить эти URL-адреса: домен/культура/идентификатор/продукт/действие, но у меня есть только одно действие для моих продуктов. Поэтому, когда пользователь заходит на мой веб-сайт, он устанавливает язык, а затем перенаправляет его на продукт, который он задал (или на продукт по умолчанию, если никто не спрашивал).

Я старался

return RedirectToRoute("/" + cultureName + "/" + id + "/" + productName + "/");

Но это не сработало, сказав мне, что маршрут не существует, что невозможно, потому что в моем обозревателе маршрутов я четко вижу маршрут /{culture}/{id}/ProductName.

Возможно ли сделать это таким образом или мне нужно изменить свое отношение к маршрутизации?


person Revv    schedule 13.11.2013    source источник


Ответы (1)


return RedirectToRoute("SomeRouteName", new { 
    culture = cultureName,
    id = id, 
    productName = productName 
});

и определение вашего маршрута:

routes.MapRoute(
    "SomeRouteName",
    "{culture}/{id}/{productName}",
    new { controller = "Home", action = "Index" }
);

Обратите внимание, что шаблон маршрута — {culture}/{id}/{productName}, где вам нужно указать каждый токен при вызове RedirectToAction. Поскольку у вас есть только одно действие в этом контроллере, вам не нужно его указывать. Это определено в вашем маршруте.

person Darin Dimitrov    schedule 13.11.2013
comment
Это сработало как шарм, но мне пришлось аннулировать название маршрута. Так что нет способа сделать это с помощью маршрутизации атрибутов? (Что, кажется, действительно лучше с точки зрения повторения кода и удобства обслуживания) - person Revv; 13.11.2013