ASP.NET MVC: Come faccio a restituire 304 “Non modificato” status?
-
25-10-2019 - |
Domanda
ASP.NET MVC 3.0, IIS 7, .NET 4
Ho un'azione che restituisce i dati che cambiano raramente (quasi statico).
C'è un modo semplice per:
- ritorno 304 "non modificato" dall'azione;
- includono "Last-Modified" time stamp nella risposta.
Io uso return Content('my data');
per il risultato azione.
In sostanza voglio un modo semplice per fare ciò che è parlato in questo articolo: http://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx
Soluzione
(molto!) Risposta in ritardo, ma questa domanda si apre vicino alla parte superiore nei risultati dei motori di ricerca in modo che potrebbe essere utile in futuro le persone che atterrano qui.
Alternativa per la parte 1:
return new HttpStatusCodeResult(304, "Not Modified");
Altri suggerimenti
Whats wrong with this for 304?
Response.StatusCode = 304;
Response.StatusDescription = "Not Modified";
return Content(String.Empty);
and this for LastModified:
Response.Cache.SetLastModified(DateTime.Now);
Or maybe just create a 'Not Modified' Filter.
use the material provided, you can build a small utility function in your controller
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;
}
then use it like this:
if (CheckStatus304(image.CreatedDate)) return Content(string.Empty);