producesresponsetype net ihttpactionresult iactionresult bad asp asp.net-mvc-3 http-status-code-304

asp.net mvc 3 - ihttpactionresult - ASP.NET MVC: ¿cómo devuelvo el estado 304 “No modificado”?



net core actionresult (3)

ASP.NET MVC 3.0, IIS 7, .NET 4

Tengo una acción que devuelve datos que rara vez cambian (casi estáticos).

¿Hay una manera fácil de:

  1. devuelve 304 "No modificado" de la acción;
  2. incluir la marca de tiempo "Última modificación" en la respuesta.

Yo uso el return Content(''my data''); Para el resultado de la acción.

Básicamente quiero una manera fácil de hacer lo que se menciona en este artículo: http://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx


¿Qué hay de malo en 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 simplemente crear un filtro ''No modificado'' .


(¡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 llegan aquí.

Alternativa para la parte 1:

return new HttpStatusCodeResult(304, "Not Modified");


Utilice el material provisto, puede construir una pequeña función de utilidad 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; }

entonces úsalo así:

if (CheckStatus304(image.CreatedDate)) return Content(string.Empty);