Есть, конечно, много решений.Я собираюсь показать вам два:
- тот, который вы контролируете в своем приложении
- , который вы контролируете вне своего приложения (в IIS)
Решение первое - маршрутизация Asp.net MVC
Обеспечение маршрутизации, охватывающей старую и новую маршрутизацию:
routes.MapRoute(
"New",
"{lang}/{controller}/{action}/{id}",
new { lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional },
new { lang = "en|de|it|es|fr" }
);
routes.MapRoute(
"NewEx",
"{lang}/{controller}/{action}/{id}/{title}",
new { lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional, title = UrlParameter.Optional },
new { lang = "en|de|it|es|fr" }
);
routes.MapRoute(
"Old",
"{controller}/{action}/{id}",
new { lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"OldEx",
"{controller}/{action}/{id}/{title}",
new { lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional, title = UrlParameter.Optional }
);
Как видите, У меня естьтакже предоставляется язык по умолчанию для старых маршрутов , так как он отсутствует в URL.Хотите вы того или нет, это ваше собственное решение, но этот вид маршрутизации позволяет не дублировать действия вашего контроллера.В любом случае вам придется определить язык по умолчанию, который может быть предоставлен таким образом.
Возникает более серьезный вопрос, хотите ли вы по-прежнему поддерживать старые URL-адреса или предпочитаете их перенаправлять (HTTP Redirect Permanent Status 301).
Постоянное перенаправление
Измените старые маршруты на:
routes.MapRoute(
"Old",
"{controllerOld}/{actionOld}/{idOld}",
new { controller = "Redirect", action = "Permanent", id = UrlParameter.Optional }
);
routes.MapRoute(
"OldEx",
"{controllerOld}/{actionOld}/{idOld}/{titleOld}",
new { controller = "Redirect", action = "Permanent", id = UrlParameter.Optional, title = UrlParameter.Optional }
);
Затем напишите класс контроллера, который выполняет перенаправление:
public class RedirectController : Controller
{
public ActionResult Permanent(string controllerOld, string actionOld, string idOld, string titleOld)
{
return RedirectToRoutePermanent(new {
lang = "en",
controller = controllerOld,
action = actionOld,
id = idOld,
title = titleOld
});
}
}
Решение второе- Модуль перезаписи URL IIS
Это решение основано на модуле перезаписи URL IIS, в котором вы можете переписывать любые запросы без выбора языка по умолчанию.
Я не буду писать, как перезапись URLработает здесь, потому что есть много веб-ресурсов с подробной информацией об этом.