Кэширование ответов ядра Asp.net по странам
Мне нужно использовать кэширование ответов для определенных действий контроллера в зависимости от страны, из которой поступил запрос.
Я выяснил, как получить код страны из запроса (это связано с чтением из базы данных, дорого, поэтому я хочу сделать это только для действий, которые требуют страны), но я не уверен, как сделать часть кэширования,
Я думаю о написании промежуточного программного обеспечения (например, с именем CountryResolver
), который будет работать до промежуточного программного обеспечения для кэширования ответов и задавать в запросе SOMEHOW для страны, а промежуточное программное обеспечение кэша ответов зависит от страны.
app.UseCountryResolver();
app.UseResponseCaching();
Есть две основные проблемы, с которыми я сталкиваюсь:
Проблема 1-
Мне нужно, чтобы это промежуточное программное обеспечение выполнялось не для каждого запроса, а только для некоторых запросов, которые направляются на действия, специфичные для конкретной страны. Я думаю о том, чтобы аннотировать такие специфические для страны действия с помощью специального атрибута (например, [CountryRequired]
).
[CountryRequired]
[ResponseCache(VaryByQueryKeys = new string[] { "country"}]
public IActionResult MyAction()
{
Однако я не знаю, как промежуточное ПО может обрабатывать действия, которые имеют такую аннотацию, чтобы он мог решить, искать ли страну или нет.
Задача 2- "... указать страну НЕКОТОРЫЕ в запросе"
Я думал об использовании VaryByQueryKeys
и промежуточное программное обеспечение устанавливает страну на ключ строки запроса с именем "страна", НО HttpContext.Request.Query
Коллекция только для чтения. Поэтому я не уверен, какой другой механизм я могу использовать для этого.
Любая помощь очень ценится.