.NET Core API 如果较新则更新缓存图像
.NET Core API update cached image if newer
我们有多租户应用程序,现在客户希望每个租户都有自己的徽标,可从管理应用程序上传。现在为了不在每次打开应用程序时都下载图像,我会告诉浏览器缓存它。
现在的问题是,如何在API中告诉浏览器有新的标志上传了?
我会将上传日期保存在数据库中,但我该如何使用它以便浏览器在需要时下载新图像?或者我需要一些我可以使用的其他信息?
你可以这样做:
[HttpGet]
public IActionResult Logo()
{
// Mock value. Get actual upload date from the db here
DateTime uploadDate = new DateTime(2021, 11, 24, 0, 0, 0, DateTimeKind.Utc);
if (Request.GetTypedHeaders().IfModifiedSince?.UtcDateTime >= uploadDate)
{
return StatusCode(StatusCodes.Status304NotModified);
}
// Mock value. Get actual image bytes from the db/disk here
byte[] bytes = new byte[0];
ResponseHeaders responseHeaders = Response.GetTypedHeaders();
responseHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
responseHeaders.LastModified = new DateTimeOffset(uploadDate);
return File(bytes, "image/png");
}
首先你得到图像字节和上传日期。然后将 If-Modified-Since
header 的值(它将由浏览器自动设置)与上传日期进行比较。如果 uploadDate
不早于此值,则表示浏览器缓存已包含 up-to-date 个图像,您可以使用 304 Not Modified
进行响应。否则,您将 Cache-Control
header 设置为 no-cache
(强制浏览器询问您的 API 缓存图像在每个请求中是否仍然有效)并设置 Last-Modified
header 到 uploadDate
。浏览器将在后续请求中 If-Modified-Since
header 中发送此值。
注意:请确保在比较日期时使用正确的时区。
我们有多租户应用程序,现在客户希望每个租户都有自己的徽标,可从管理应用程序上传。现在为了不在每次打开应用程序时都下载图像,我会告诉浏览器缓存它。
现在的问题是,如何在API中告诉浏览器有新的标志上传了? 我会将上传日期保存在数据库中,但我该如何使用它以便浏览器在需要时下载新图像?或者我需要一些我可以使用的其他信息?
你可以这样做:
[HttpGet]
public IActionResult Logo()
{
// Mock value. Get actual upload date from the db here
DateTime uploadDate = new DateTime(2021, 11, 24, 0, 0, 0, DateTimeKind.Utc);
if (Request.GetTypedHeaders().IfModifiedSince?.UtcDateTime >= uploadDate)
{
return StatusCode(StatusCodes.Status304NotModified);
}
// Mock value. Get actual image bytes from the db/disk here
byte[] bytes = new byte[0];
ResponseHeaders responseHeaders = Response.GetTypedHeaders();
responseHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
responseHeaders.LastModified = new DateTimeOffset(uploadDate);
return File(bytes, "image/png");
}
首先你得到图像字节和上传日期。然后将 If-Modified-Since
header 的值(它将由浏览器自动设置)与上传日期进行比较。如果 uploadDate
不早于此值,则表示浏览器缓存已包含 up-to-date 个图像,您可以使用 304 Not Modified
进行响应。否则,您将 Cache-Control
header 设置为 no-cache
(强制浏览器询问您的 API 缓存图像在每个请求中是否仍然有效)并设置 Last-Modified
header 到 uploadDate
。浏览器将在后续请求中 If-Modified-Since
header 中发送此值。
注意:请确保在比较日期时使用正确的时区。