Как включить кэширование ответов с помощью HttpWebRequest в .NET Core - PullRequest
0 голосов
/ 25 апреля 2019

Это продолжение до этого вопроса относительно кэширования ответов на HttpWebRequest.

У меня есть сервер WebApi, который возвращает ответ JSON с заголовком Expires, который указывает, как долго ответ должен кэшироваться локально на клиенте.

Я написал библиотеку .Net Standard 2.0 с кодом для включения RequestCachePolicy по умолчанию следующим образом:

var policy = new RequestCachePolicy(RequestCacheLevel.Default);
HttpWebRequest.DefaultCachePolicy = policy;

var request = WebRequest.Create(url);
... etc, a typical HttpWebRequest exchange ...

Я называю эту библиотеку .NET Standard из консольного приложения .NET Framework 4.6.1. Кеширование работает так, как я ожидал:

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

Это то, что я ожидал, так как согласно этому ответу он использует Microsoft.Win32.WinInetCache, который использует функции WinInet для кэширования, так что данные кэшируются в кеше, совместно используемом несколькими процессами (а также с IE, если я правильно понимаю).

Если я запускаю точно такой же код .NET Standard 2.0 из консольного приложения .NET Core, кэширование не выполняется, и каждый запрос отправляется на сервер.

Понятно, что .NET Core не использует Microsoft.Win32.WinInetCache по причинам переносимости. Есть ли способ получить автоматическое кэширование ответов в .NET Core (например, путем внедрения реализации кэширования с использованием конфигурации).

Меня интересуют решения для .NET Core 2.x в Windows и в Linux. В идеале кэшированные данные должны быть разделены между несколькими процессами, как это происходит в .NET Framework.

Кто-нибудь может помочь?

...