У меня есть конечная точка, которая обслуживает аватар пользователя. Если он не установлен, для его имени генерируется идентификатор. Если у них есть один набор, он возвращает этот аватар.
Сейчас я использую атрибут [ResponseCache] для кэширования этой конечной точки. Вместо этого я хочу кэшировать конечную точку только в том случае, если у нее установлен аватар.
Проблема в том, что у пользователей нет аватара, они устанавливают его, а он не обновляется. вокруг сайта, потому что он кэшируется в браузере.
Есть ли способ переместить это в действие и сделать его условным?
[HttpGet("~/fetch-avatar")]
[ResponseCache(Duration = int.MaxValue)]
public async Task GetAvatar(long userId, ResizeMode mode = ResizeMode.Pad, int width = 0, int height = 0, string downloadName = "") {
var user = await userAppService.GetUserById(userId);
var startChar = user.Slug.ToLower().ToCharArray()[0];
var color = System.Drawing.Color.White;
if (startChar >= 'a' && startChar < 'e') {
color = System.Drawing.Color.Red;
} else if (startChar >= 'e' && startChar < 'j') {
color = System.Drawing.Color.Blue;
} else if (startChar >= 'j' && startChar < 'n') {
color = System.Drawing.Color.Green;
} else if (startChar >= 'n' && startChar < 'r') {
color = System.Drawing.Color.Pink;
} else if (startChar >= 'r' && startChar < 'v') {
color = System.Drawing.Color.Yellow;
} else if (startChar >= 'v' && startChar < 'z') {
color = System.Drawing.Color.Orange;
}
if (string.IsNullOrEmpty(user.Avatar)) {
var g = new IdenticonGenerator()
.WithAlgorithm("SHA256")
.WithBlockGenerators(IdenticonGenerator.ExtendedBlockGeneratorsConfig)
.WithBackgroundColor(color);
var avatar = g.Create(user.Slug);
using (var stream = new MemoryStream()) {
avatar.Save(stream, ImageFormat.Png);
return File(stream.ToArray(), "image/png");
}
}
try {
return await FetchImage(user.Avatar, mode, width, height);
} catch {
var g = new IdenticonGenerator()
.WithAlgorithm("SHA256")
.WithBlockGenerators(IdenticonGenerator.ExtendedBlockGeneratorsConfig)
.WithBackgroundColor(color);
var avatar = g.Create(user.Slug);
using (var stream = new MemoryStream()) {
avatar.Save(stream, ImageFormat.Png);
return File(stream.ToArray(), "image/png");
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/649 ... onse-cache
Кэш ответов условно заданного ядра ASPNet ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Измените кэш-контроль max-age-48000 на кэш-контроль max-age=48000 в заголовке ответа.
Anonymous » » в форуме C# - 0 Ответы
- 140 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Измените кэш-контроль max-age-48000 на кэш-контроль max-age=48000 в заголовке ответа.
Anonymous » » в форуме C# - 0 Ответы
- 126 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Измените кэш-контроль max-age-48000 на кэш-контроль max-age=48000 в заголовке ответа.
Anonymous » » в форуме C# - 0 Ответы
- 96 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как заполнить кэш новыми значениями, когда кэш запроса истекает: Ehcache 3 и Hibernate 5
Anonymous » » в форуме JAVA - 0 Ответы
- 47 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как заполнить кэш новыми значениями, когда кэш запроса истекает: Ehcache 3 и Hibernate 5
Anonymous » » в форуме JAVA - 0 Ответы
- 41 Просмотры
-
Последнее сообщение Anonymous
-