Wie kann ich ETags in ASP.NET MVC unterstützen?
-
06-09-2019 - |
Frage
Wie kann ich ETags in ASP.NET MVC unterstützen?
Lösung
@Elijah Glover Antwort ist ein Teil der Antwort, aber nicht wirklich abgeschlossen. Dadurch wird den ETag gesetzt, aber sie sind nicht die Vorteile von ETags bekommen, ohne es auf der Server-Seite zu überprüfen. Sie tun das, mit:
var requestedETag = Request.Headers["If-None-Match"];
if (requestedETag == eTagOfContentToBeReturned)
return new HttpStatusCodeResult(HttpStatusCode.NotModified);
Auch ist ein weiterer Tipp, dass Sie die Cache-Fähigkeit der Antwort setzen müssen, sonst standardmäßig es ist „privates“ und der ETag wird nicht in der Antwort gesetzt werden:
Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
So ein vollständiges Beispiel:
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
}
Andere Tipps
ETAG ist in MVC sind die gleichen wie WebForms oder Httphandlers.
Sie müssen einen Weg der ETAG Wert zu schaffen, der beste Weg, die ich gefunden habe ist mit einem Datei-MD5 oder ShortGuid .
Da .net eine Zeichenfolge als ETAG akzeptiert, können Sie es leicht gesetzt mit
String etag = GetETagValue(); //e.g. "00amyWGct0y_ze4lIsj2Mw"
Response.Cache.SetETag(etag);