ASP.NET MVC: ¿Cómo devuelvo 304 estado "no modificado"?
-
25-10-2019 - |
Pregunta
ASP.NET MVC 3.0, IIS 7, .NET 4
Tengo una acción que devuelve datos que rara vez cambian (casi estático).
¿Hay una manera fácil de:
- devolver 304 "no modificado" de la acción;
- Incluya la marca de tiempo "último modificado" en la respuesta.
yo suelo return Content('my data');
Para el resultado de la acción.
Básicamente, quiero una manera fácil de hacer lo que se habla en este artículo: http://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx
Solución
(¡Muy!) Respuesta tardía Pero esta pregunta aparece cerca de la parte superior en los resultados del motor de búsqueda, por lo que podría ser útil para las futuras personas que aterrizan aquí.
Alternativa para la Parte 1:
return new HttpStatusCodeResult(304, "Not Modified");
Otros consejos
¿Qué pasa con esto para 304?
Response.StatusCode = 304;
Response.StatusDescription = "Not Modified";
return Content(String.Empty);
y esto para LastModified:
Response.Cache.SetLastModified(DateTime.Now);
O tal vez solo crear un Filtro 'no modificado'.
Use el material proporcionado, puede construir una función de utilidad pequeña en su controlador
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;
}
Luego úsalo así:
if (CheckStatus304(image.CreatedDate)) return Content(string.Empty);