Pergunta

Como posso apoiar ETags no ASP.NET MVC?

Foi útil?

Solução

@Elijah de Glover resposta é parte da resposta, mas não é realmente completa. Isto irá definir o ETag, mas você não está recebendo os benefícios de ETags sem verificá-lo no lado do servidor. Você faz isso com:

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

Além disso, outra dica é que você precisa para definir o cacheability da resposta, caso contrário, por padrão ele de "privado" e o ETag não será definido na resposta:

Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);

Assim, um exemplo completo:

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
}

Outras dicas

ETAG de em MVC são os mesmos que WebForms ou HttpHandlers.

Você precisa encontrar uma maneira de criar o valor ETAG, a melhor maneira que eu encontrei está usando um MD5 do arquivo ou ShortGuid .

Desde .net aceita uma string como um ETAG, você pode configurá-lo facilmente usando

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

Vídeo de MIX , no final eles usam ETAG Com DESCANSO

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top