如何在ASP.NET MVC中支持ETags?
发布于 2013-07-16 00:08:07
@Elijah Glover's answer是答案的一部分,但并不是真正完整的。这将设置ETag,但如果不在服务器端进行检查,您将无法获得ETags的好处。您可以使用以下命令来实现:
var requestedETag = Request.Headers["If-None-Match"];
if (requestedETag == eTagOfContentToBeReturned)
return new HttpStatusCodeResult(HttpStatusCode.NotModified);
此外,另一个技巧是您需要设置响应的可缓存性,否则默认情况下它是“私有的”,并且不会在响应中设置ETag:
Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
下面是一个完整的例子:
public ActionResult Test304(string input)
{
var requestedETag = Request.Headers["If-None-Match"];
var responseETag = LookupEtagFromInput(input); // lookup or generate etag however you want
if (requestedETag == responseETag)
return new HttpStatusCodeResult(HttpStatusCode.NotModified);
Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
Response.Cache.SetETag(responseETag);
return GetResponse(input); // do whatever work you need to obtain the result
}
https://stackoverflow.com/questions/937668
复制相似问题