Это продолжение до этого вопроса относительно кэширования ответов на 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.
Кто-нибудь может помочь?