ASP.NET MVC: Wie halte ich 304 "Nicht geändert" Status zurück?
-
25-10-2019 - |
Frage
ASP.NET MVC 3.0, IIS 7, .NET 4
Ich habe eine Aktion, die Daten zurückgibt, die sich selten ändert (fast statisch).
Gibt es einen einfachen Weg zu:
- Rückgabe 304 "nicht modifiziert" aus der Aktion;
- Geben Sie die Zeitstempel "Last-modifiziert" in die Antwort ein.
ich benutze return Content('my data');
für Aktionsergebnisse.
Grundsätzlich möchte ich eine einfache Möglichkeit, das zu tun, worüber in diesem Artikel gesprochen wird: http://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx
Lösung
(Sehr!) Späte Antwort, aber diese Frage taucht in der Suchmaschinenergebnisse in der Nähe der Spitze auf, sodass es für zukünftige Menschen nützlich sein könnte, die hier landen.
Alternative für Teil 1:
return new HttpStatusCodeResult(304, "Not Modified");
Andere Tipps
Was ist los mit diesem für 304?
Response.StatusCode = 304;
Response.StatusDescription = "Not Modified";
return Content(String.Empty);
und dies für LastModified:
Response.Cache.SetLastModified(DateTime.Now);
Oder vielleicht einfach eine erstellen "Nicht geändert" Filter.
Verwenden Sie das bereitgestellte Material, Sie können eine kleine Nützlichkeitsfunktion in Ihrem Controller erstellen
protected bool CheckStatus304(DateTime lastModified)
{
//http://weblogs.asp.net/jeff/304-your-images-from-a-database
if (!String.IsNullOrEmpty(Request.Headers["If-Modified-Since"]))
{
CultureInfo provider = CultureInfo.InvariantCulture;
var lastMod = DateTime.ParseExact(Request.Headers["If-Modified-Since"], "r", provider).ToLocalTime();
if (lastMod == lastModified.AddMilliseconds(-lastModified.Millisecond))
{
Response.StatusCode = 304;
Response.StatusDescription = "Not Modified";
return true;
}
}
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetLastModified(lastModified);
return false;
}
Dann benutze es so:
if (CheckStatus304(image.CreatedDate)) return Content(string.Empty);