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:

  1. devolver 304 "no modificado" de la acción;
  2. 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

¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top