Глобализация MVC3: требуется глобальный фильтр перед привязкой модели

В настоящее время у меня есть глобальный фильтр под названием GlobalizationFilter , который проверяет значения маршрута, файлы cookie и заголовок языков браузера, чтобы определить правильные настройки культуры для запроса:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    // determine cultureInfo
    Thread.CurrentThread.CurrentCulture = cultureInfo;
    Thread.CurrentThread.CurrentUICulture = cultureInfo;
}

Все работает, но процесс привязки модели кажется, что происходит до глобальных фильтров, поэтому связыватель модели не принимает во внимание параметры языка и региональных параметров.

Это приводит к проблемам с интерпретацией значений типа double, DateTime значений и т. Д.

Я мог бы переместить код определения культуры в другие места, но мне не нравятся мои варианты:

  • Событие приложения BeginRequest . На данный момент маршрутизация не произошла, поэтому мне придется вручную выудить токен культуры / en-US / из URL-адреса. Это недопустимо.

  • Метод контроллера Initialize () . Это заставит меня написать базовый класс для всех моих контроллеров и унаследовать от него существующие контроллеры. Мне это не нравится, но я выберу это решение, если ничего лучше не появится.

В идеале я хочу найти способ внедрить свой код между событиями «завершение маршрутизации» и «начало привязки модели», но я ничего не нашел в MSDN / Google по этому поводу.

Или, может быть, есть другой способ справиться с глобализацией MVC3, о котором я не знаю?

Заранее благодарим за любой вклад.

14
задан Zruty 26 August 2011 в 09:22
поделиться