我有一個控制器,它返回SVG images.As我想有良好的表現,我決定使用緩存。HTTP緩存如何在asp mvc中工作4
根據我在網上閱讀的內容,一旦您將最後修改日期設置爲HttpContext.Response.Cache.SetLastModified(date)
,您可以使用HttpContext.Request.Headers.Get("If-Modified-Since")
從瀏覽器中請求它。比較兩個日期。如果它們相等,則表示圖像未被修改,因此您可以返回HttpStatusCodeResult(304, "Not Modified")
。
但奇怪的事情發生了,這裏是我的代碼:
[OutputCache(Duration = 60, Location = OutputCacheLocation.Any, VaryByParam = "id")]
public ActionResult GetSVGResources(string id)
{
DateTime lastModifiedDate = Assembly.GetAssembly(typeof(Resources)).GetLinkerTime();
string rawIfModifiedSince = HttpContext.Request.Headers.Get("If-Modified-Since");
if (string.IsNullOrEmpty(rawIfModifiedSince))
{
// Set Last Modified time
HttpContext.Response.Cache.SetLastModified(lastModifiedDate);
}
else
{
DateTime ifModifiedSince = DateTime.Parse(rawIfModifiedSince);
if (DateTime.Compare(lastModifiedDate, ifModifiedSince) == 0)
{
// The requested file has not changed
return new HttpStatusCodeResult(304, "Not Modified");
}
}
if (!id.Equals("null"))
return new FileContentResult(Resources.getsvg(id), "image/svg+xml");
else
return null;
}
正在發生的事情是功能 HttpContext.Response.Cache.SetLastModified(lastModifiedDate);
不設置「如果-Modified-Since的」從瀏覽器返回時,事實上的功能HttpContext.Request.Headers.Get("If-Modified-Since")
正好回退圖像從前一個呼叫return new FileContentResult(Resources.getsvg(id), "image/svg+xml");
返回的時間。
所以我的問題是,
1 - 什麼是設置的功能HttpContext.Response.Cache.SetLastModified(lastModifiedDate)
到底是什麼?
2 - 我如何(服務器)設置瀏覽器的「If-Modified-Since」返回?
有趣的是,我不知道「outputcache」是否是服務器端基於內存的緩存。但是,如何檢查是否需要返回圖像?因爲「If-Modified-Since」的返回時間不是上次修改圖像的時間。 – coldistric