【发布时间】:2016-02-03 15:49:38
【问题描述】:
我有一个返回 SVG 图像的控制器。由于我想获得良好的性能,我决定使用 缓存。
根据我在网上阅读的内容,一旦您将上次修改日期设置为 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);没有设置浏览器返回的“If-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”?
【问题讨论】:
标签: asp.net-mvc-4 http-headers browser-cache cache-control outputcache