Подтвердить что ты не робот

ASP.NET MVC: как мне вернуть статус 304 "Не изменен"?

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

У меня есть действие, которое возвращает данные, которые редко меняются (почти статические).

Есть ли простой способ:

  • return 304 "Не изменено" из действия;
  • включить ответ "Last-Modified" в ответе.

Я использую return Content('my data'); для результата действия.

В принципе, я хочу простой способ сделать то, о чем говорится в этой статье: http://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx

4b9b3361

Ответ 1

(Very!) поздний ответ, но этот вопрос появляется в верхней части результатов поиска, поэтому он может быть полезен для будущих людей, приземляющихся здесь.

Альтернатива для части 1:

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

Ответ 2

Что не так с этим за 304?

        Response.StatusCode = 304;
        Response.StatusDescription = "Not Modified";
        return Content(String.Empty);

а для LastModified:

        Response.Cache.SetLastModified(DateTime.Now);

Или просто создайте 'Не измененный' Фильтр.

Ответ 3

используйте предоставленный материал, вы можете создать небольшую полезную функцию в вашем контроллере

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;
}

то используйте его следующим образом:

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