Soru ASP.NET MVC: 304 “Değiştirilmemiş” durumunu nasıl iade edebilirim?


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

Nadiren (neredeyse statik) değişen verileri döndüren bir eylemim var.

İçin kolay bir yolu var mı:

  1. eylemden 304 "Değiştirilmemiş" iadesi;
  2. Yanıtta "Son Modifiye" zaman damgasını içerir.

kullanırım return Content('my data'); eylem sonucu için.

Temel olarak, bu makalede anlatılan şeyi yapmanın kolay bir yolunu istiyorum: http://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx


17
2018-04-27 20:14


Menşei


.NET çekirdeği için benzer Q & A bulunabilir bu soruda - GolezTrol


Cevaplar:


(Çok!) Geç cevap ama bu soru arama motoru sonuçlarında en üste çıkarak ortaya çıkıyor, bu yüzden buraya gelecekteki insanlara faydalı olabilir.

Bölüm 1 için alternatif:

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

14
2017-09-20 21:36





Bunun 304 için nesi var?

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

ve bu LastModified için:

        Response.Cache.SetLastModified(DateTime.Now);

Ya da belki sadece bir 'Modifiye Değil' Filtresi.


10
2018-04-27 20:38



çok fazla yazarak. Umarım böyle bir şey yapmanın yolu vardır: return NotModified(myResource.LastModified); - THX-1138
Daha da önemlisi, istekte "If-Modified-Since" i kontrol etmek ve ayrıştırmak zorundayım ve bu benim için çok karmaşık hale geliyor. - THX-1138
"'Modifiye Edilmedi' Filtresi." bağlantı bozuk - Simon
@Simon: şimdi çalışıyor - CD..


Sağlanan malzemeyi kullanın, kontrol cihazınızda küçük bir yardımcı fonksiyon oluşturabilirsiniz

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

sonra böyle kullanın:

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

1
2017-08-26 09:00