Come supporto ETags in ASP.NET MVC?Come supporto ETags in ASP.NET MVC?
risposta
@Elijah Glover è parte di la risposta, ma non veramente completa. Questo imposterà l'ETag, ma non otterrai i benefici di ETags senza controllarlo sul lato server. Di farlo con:
var requestedETag = Request.Headers["If-None-Match"];
if (requestedETag == eTagOfContentToBeReturned)
return new HttpStatusCodeResult(HttpStatusCode.NotModified);
Inoltre, un altro suggerimento è che è necessario impostare la cacheability della risposta, altrimenti di default è "privato" e l'ETag non sarà impostato nella risposta:
Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
Quindi, un esempio 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
}
Gli ETAG in MVC sono gli stessi di WebForms o HttpHandlers.
È necessario un modo per creare il valore ETAG, il modo migliore che ho trovato è utilizzare un file MD5 o ShortGuid.
Dal .net accetta una stringa come ETAG, è possibile impostare facilmente usando
String etag = GetETagValue(); //e.g. "00amyWGct0y_ze4lIsj2Mw"
Response.Cache.SetETag(etag);
Video da MIX, alla fine usano ETAG di con il riposo
risposta diPenso che questo è sbagliato! perché aggiungere un ETag statico sarebbe come dire che il tuo contenuto non cambierà mai. L'idea di ETags è di far sapere al browser che il contenuto è cambiato, simile alle intestazioni di scadenza .. –
Penso che il valore di harcoded sia solo a scopo illustrativo ... puoi creare qualcosa al volo e cambiarlo. – Romias
Infatti. La stessa menzione dell'utilizzo di MD5 suggerisce che è calcolato (forse solo quando viene cambiato o al volo ogni volta) e restituito. Non è chiaramente un suggerimento per usare un valore statico. –
- 1. Continua Supporto Ninject in ASP.NET MVC 6?
- 2. Supporto incorporato ASP.NET MVC per il modello di editor DropDownList
- 3. ASP.NET MVC - Ottieni ViewContext dal metodo di supporto
- 4. Supporto dell'intestazione "Expect: 100-continue" con ASP.NET MVC
- 5. Sovraccarico Azioni MVC ASP.NET
- 6. Asp.Net temi MVC, come?
- 7. Ottenere ETags corretto
- 8. Come funziona asp.net mvc?
- 9. Supporto area Web ASP.Net
- 10. ASP.NET MVC e HTML5
- 11. auto hosting asp.net mvc
- 12. Rappresentazione in ASP.NET MVC
- 13. Sovrascrittura appartenenza ASP.NET in ASP.NET MVC 4
- 14. Supporto per optgroup in dropdownlist .NET MVC?
- 15. Aree multiprogetto in ASP.Net MVC 3
- 16. ASP.NET AJAX vs jQuery in ASP.NET MVC
- 17. Emacs: come generare gli etags per coffeescript?
- 18. Come gestire il paging in asp.net mvc?
- 19. Come utilizzo Application_Error in ASP.NET MVC?
- 20. come gzip il contenuto in asp.net MVC?
- 21. Come reindirizzare all'azione precedente in ASP.NET MVC?
- 22. Come generare dropdownlist in asp.net MVC rasoio
- 23. Come Mock HttpContext.User.Identity.Name in Asp.Net MVC 4
- 24. Come utilizzare SOAP in asp.net mvc
- 25. Come scrivere righe alternate in asp.net mvc
- 26. Come funziona ViewBag in ASP.NET MVC
- 27. In ASP.NET MVC, come funziona response.redirect?
- 28. Come viene chiamato Error.cshtml in ASP.NET MVC?
- 29. come codificare '/' in ASP.NET MVC Razor
- 30. Come mescolare WebForms e MVC in ASP.NET
Questa è una buona risposta, per coloro che cercano di implementare questo, consiglierei di implementare un ActionFilter astratto che implementa questa logica di test, e un metodo astratto chiamato "abstract string CalculateEtag (HttpRequest)", sottoclassi per ogni caso in cui è necessario Etag supporto. Ciò manterrà i tuoi metodi di azione "magri" e faciliterà la verifica della generazione degli effetti. –
cosa si memorizza in eTagOfContentToBeReturned? come generare etag per ogni azione? –