Я немного боролся с этим, пока не обдумал это. Это было намного проще сделать в контроллере, как это сделал Перхентиан, тогда непосредственно в конфигурации маршрута, по крайней мере, в моей ситуации, так как наши новые URL не содержат id
в них. Причина в том, что в контроллере у меня был доступ ко всем моим репозиториям и объектам домена. Чтобы помочь другим, это то, что я сделал:
routes.MapRoute(null,
"product_list.aspx", // Matches legacy product_list.aspx
new { controller = "Products", action = "Legacy" }
);
public ActionResult Legacy(int catid)
{
MenuItem menuItem = menu.GetMenuItem(catid);
return RedirectPermanent(menuItem.Path);
}
menu
- это объект, в котором я хранил информацию, связанную с пунктами меню, например, путь, который является URL-адресом для пункта меню.
Это перенаправляет, например,
/product_list.aspx?catid=50
до
/pc-tillbehor/kylning-flaktar/flaktar/170-mm
Обратите внимание, что RedirectPermanent
- это MVC3 +. Если вы используете старую версию, вам нужно создать 301 вручную.