我們有多租戶應用程式,現在客戶希望每個租戶都有自己的徽標,可從管理應用程式上傳。現在為了不在每次打開應用程式時下載影像,我會告訴瀏覽器快取它。
現在的問題是,當有新的 logo 上傳時,如何從 API 中告訴瀏覽器?我會將上傳日期保留在資料庫中,但如何使用它以便瀏覽器在需要時下載新影像?或者我需要一些可以使用的其他資訊?
uj5u.com熱心網友回復:
你可以這樣做:
[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-Sinceheader 的值(它將由瀏覽器自動設定)與上傳日期進行比較。如果uploadDate不早于此值,則表示瀏覽器快取已包含最新影像,您可以使用304 Not Modified. 否則,您將Cache-Controlheader設定為no-cache(這會強制瀏覽器詢問您的 API 快取影像是否對每個請求仍然有效)并將Last-Modifiedheader設定為uploadDate. 瀏覽器將If-Modified-Since在后續請求的標頭中發送此值。
注意:確保在比較日期時使用正確的時區。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/366914.html
