У меня есть ASP. NET Core 3.1 WebAPI, который обслуживает другие приложения с изображениями. Входящий запрос может определять максимальную высоту изображения, используя строку запроса.
Так что, если приложение хочет конкретное c изображение с максимальной шириной 200 пикселей, запрос будет https://example.com/images/blue_skye.jpg?maxwidth=200
, и если приложение хочет изображение в оригинальном размере, тогда запрос будет https://example.com/images/blue_skye.jpg
.
. Мой WebApi создает изображения разных размеров на лету для каждого запроса. Я хочу иметь возможность кэшировать ответ сервера в памяти или на диск, чтобы не создавать заново изображения.
Вот как настроено мое промежуточное ПО FileProvider
app.UseStaticCustomFiles(new StaticCustomFileOptions()
{
FileProvider = new ImageProvider("app root", imageProcessor),
RequestPath = new PathString("/images"),
});
Я могу установить OnPrepareResponse
свойство, устанавливающее значения элемента управления кэшем, например, так:
app.UseStaticCustomFiles(new StaticCustomFileOptions()
{
FileProvider = new ImageProvider("app root", imageProcessor),
RequestPath = new PathString("/images"),
OnPrepareResponse = ctx =>
{
const int durationInSeconds = 3600 * 24 * 15;
ctx.Context.Response.Headers[HeaderNames.CacheControl] = "public,max-age=" + durationInSeconds;
}
});
Но я думаю, что это частный элемент управления кэшем, который означает, что он будет кэшировать его по запросу и не будет использоваться совместно с другими приложениями.
Как настроить общий кэш, чтобы, если несколько пользователей запросили https://example.com/images/blue_skye.jpg?maxwidth=200
, сервер создавал изображения с разрешением 200 пикселей и кэшировал их для всех будущих запросов от других пользователей / приложений?