Question

Comment puis-je soutiens ETags dans ASP.NET MVC?

Était-ce utile?

La solution

@Elijah de réponse Glover fait partie de la réponse, mais pas vraiment complète. Cela va régler le ETag, mais vous n'êtes pas obtenir les avantages de ETags sans vérifier sur le côté serveur. Vous le faites avec:

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

En outre, une autre astuce est que vous devez définir le cacheability de la réponse, sinon par défaut, il est « privé » et le ETag ne sera pas définie dans la réponse:

Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);

Ainsi, un exemple complet:

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
}

Autres conseils

ETAG est dans MVC sont les mêmes que WebForms ou HttpHandlers.

Vous avez besoin d'un moyen de créer la valeur ETAG, la meilleure façon que j'ai trouvé utilise un fichier MD5 ou ShortGuid .

Depuis .net accepte une chaîne comme ETAG, vous pouvez le régler facilement en utilisant

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

Vidéo de MIX , à la fin, ils utilisent ETAG de REST

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top