Я собираюсь создать новое приложение mvc для Asp.Net. Я определил маршрут с пользовательским ограничением, который устанавливает текущую культуру приложения из URL-адреса. Я пытаюсь управлять локализацией для своего приложения, создавая пользовательский IRequestCultureProvider
, который выглядит следующим образом:
public class MyCustomRequestCultureProvider : IRequestCultureProvider
{
public Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
var language= httpContext.GetRouteValue("language");
var result = new ProviderCultureResult(language, language);
return Task.FromResult(result);
}
}
Мой MyCustomRequestCultureProvider
попадает на каждый запрос, и это нормально. Моя проблема заключается в том, что в конвейере MVC метод DetermineProviderCultureResult
от моего провайдера попадает перед процессом маршрутизации, поэтому httpContext.GetRouteValue("language")
всегда возвращает значение null.
В предыдущей версии MVC у меня была возможность вручную обработать мой URL-адрес через процесс маршрутизации, сделав это
var wrapper = new HttpContextWrapper(HttpContext.Current);
var routeData = RouteTable.Routes.GetRouteData(wrapper);
var language = routeData.GetValue("language")
Я не могу найти способ сделать то же самое в новом framewrok прямо сейчас. Кроме того, я хочу использовать данные маршрута, чтобы узнать мои langugae, анализируя мою строку url с некоторыми строковыми функциями, чтобы найти язык не является вариантом.