ASP net core: настройка культуры сериализации ответов для контроллера и / или действия - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть приложение с несколькими контроллерами, которые используются в разных сценариях ios. Это означает, что разные контроллеры нуждаются в разной стратегии для определения правильной культуры, используемой для ответа. Некоторые примеры различных способов определения культуры (в псевдо C# коде)

  • user.culture ?? принять язык
  • принять язык ?? setting.GetCustomValue (controllerXCulture)
  • accept-language

RequestCultureProvider получает только HttpContext, поэтому мне не хватает ControllerActionContext, чтобы иметь возможность определить стратегия выбора. Или кто-то знает, как его получить?

Добавление промежуточного программного обеспечения для настройки культуры потоков также не работает. Он установит желаемую культуру во время выполнения действия, но когда сериализуется ответ, будет восстановлена ​​исходная культура, определенная стандартным RequestCultureProviders, что приведет к ответу в неправильной культуре.

Кто-нибудь знает о способ установить культуру ответа или как настроить пользовательский RequestCultureProvider на контроллер?

[править]
Я попытался найти обходные пути, подумав, может быть, я смогу установить нужную культуру в какой-то момент после сохраняя его в HttpContext.Items, но я не могу найти хорошую точку для его установки. Я дошел до создания пользовательского выходного форматера, полученного из NewtonsoftJsonOutputFormatter, но он не вызывался, даже когда я сначала очистил другие форматеры в Startup.ConfigureServices. И никакое другое место, где я установил культуру, не приводило к правильной настройке культуры во время сериализации.
[/ edit]

1 Ответ

0 голосов
/ 15 апреля 2020

Используя множество различных вариантов поиска в Google, я попал на эту страницу:
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-3.1#using -middleware-in-the-filter-pipe

Это не так самое идеальное решение, потому что вам нужно создать несколько классов для разных типов поведения, но, по крайней мере, оно позволяет мне создавать собственные параметры локализации для контроллера / действия.

На данный момент это лучшее решение, хотя я надеюсь, что может быть и более элегантное. По крайней мере, это не кажется счастливым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...