Как мне поддерживать ETags в ASP.NET MVC?
Как поддерживать ETags в ASP.NET MVC?
Ответ 1
@Elijah Glover ответ является частью ответа, но на самом деле не завершен. Это установит ETag, но вы не получите преимуществ ETag без проверки его на стороне сервера. Вы делаете это с:
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
}
Ответ 2
ETAG в MVC такие же, как WebForms или HttpHandlers.
Вам нужен способ создания значения ETAG, лучший способ, который я нашел, - использовать файл MD5 или ShortGuid.
Так как .net принимает строку как ETAG, вы можете легко ее установить, используя
String etag = GetETagValue(); //e.g. "00amyWGct0y_ze4lIsj2Mw"
Response.Cache.SetETag(etag);
Видео из MIX, в конце они используют ETAG с REST