Вопрос

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

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

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

  1. вернуть 304 «не изменен» из действия;
  2. Включите в ответ «Последние модифицированные» марки времени.

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

и это для последнего помолога:

        Response.Cache.SetLastModified(DateTime.Now);

Или, может быть, просто создайте «Не изменен» фильтр.

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

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top