Вопрос

Как мне поддерживать ETags в ASP.NET MVC?

Это было полезно?

Решение

@Ответ Элайджи Гловера это часть ответа, но на самом деле не полный.Это установит 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
}

Другие советы

ETAG'ы в MVC такие же, как WebForms или HttpHandlers.

Вам нужен способ создания значения ETAG, лучший способ, который я нашел, - это использовать файл MD5 или Короткий проводник.

Поскольку .net принимает строку в качестве ETAG, вы можете легко установить ее с помощью

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

Видео из СМЕШАТЬ, в конце они используют ETAG с REST

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top