我如何在ASP.NET MVC中支持ETags?

我如何在ASP.NET MVC中支持ETags?

@Elijah Glover的答案是答案的一部分,但并不完全。 这将设置ETag,但是如果不在服务器端检查ETag,您将得不到ETag的好处。 你这样做:

var requestedETag = Request.Headers["If-None-Match"]; if (requestedETag == eTagOfContentToBeReturned) return new HttpStatusCodeResult(HttpStatusCode.NotModified); 

此外,另一个提示是您需要设置响应的caching能力,否则默认情况下它是“私人的”,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 } 

MVC中的ETAG与WebForms或HttpHandlers相同。

您需要创buildETAG值的方法,我发现的最好方法是使用文件MD5或ShortGuid 。

由于.net接受一个string作为一个ETAG,你可以很容易地使用

 String etag = GetETagValue(); //eg "00amyWGct0y_ze4lIsj2Mw" Response.Cache.SetETag(etag); 

来自MIX的video,最后他们使用ETAG和REST