Я создаю простой MVC-проект для тестирования перевода URL-адресов.Я использую пакет nuget RouteLocalization.MVC для перевода.Когда я добавляю этот пакет и настраиваю его, маршрутизация перестает работать, и я всегда получаю ошибку http 404, даже если URL совпадает с маршрутом.
Здесь, шаг за шагом, что я сделал:
- Я создал проект MVC, простой контроллер и простое действие, возвращающее представление.
Я настроил маршрут для наличия языка в URL.Вот код в моем RouteConfig.cs
:
routes.MapRoute(
name: "Default",
url: "{lang}/{controller}/{action}/{id}",
constraints: new { lang = @"(\w{2})|(\w{2}-\w{2})" },
defaults: new { lang = "it", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default2",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Я создал пользовательский IControllerActivator
, который меняет мой язык, и я зарегистрировал его в своем Global.asax
:
public class LocalizedControllerActivator : IControllerActivator
{
private string _DefaultLanguage = "it";
public IController Create(RequestContext requestContext, Type controllerType)
{
//Get the {language} parameter in the RouteData
string lang = _DefaultLanguage;
if (requestContext.RouteData.Values["lang"] != null)
lang = requestContext.RouteData.Values["lang"].ToString();
if (lang != _DefaultLanguage)
{
try
{
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
}
catch (Exception e)
{
throw new NotSupportedException(String.Format("ERROR: Invalid language code '{0}'.", lang));
}
}
return DependencyResolver.Current.GetService(controllerType) as IController;
}
}
На данный момент все работает правильно.И если я переключаюсь между it
и en
, я вижу разницу во взглядах.
Я добавляю RouteLocalization.MVC NuGet Package.Я украшаю свой контроллер / действие переведенным URL.
[RoutePrefix("HomeITA")]
public class HomeController : Controller
{
[Route("IndexITA", Name = "IndexRouteName")]
public ActionResult Index()
{
return View();
}
}
В RouteConfig.cs
перед настройкой маршрута я добавляю эту строку:
routes.MapMvcAttributeRoutes(Localization.LocalizationDirectRouteProvider);
Все перестает работать.Я использую отладчик маршрута, чтобы понять, в чем заключается моя ошибка, но я не понимаю.Вот результат:
- Проверка, если я использую имя контроллера / действия.Здесь пользовательский
IControllerActivator
запустить:
Тест, если использовать переведенный URL.Здесь пользовательский
IControllerActivator
не запускается:
Что не так?Спасибо тебе