我如何在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