Frage

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

Ich habe eine Aktion, die Daten zurückgibt, die sich selten ändert (fast statisch).

Gibt es einen einfachen Weg zu:

  1. Rückgabe 304 "nicht modifiziert" aus der Aktion;
  2. Geben Sie die Zeitstempel "Last-modifiziert" in die Antwort ein.

ich benutze return Content('my data'); für Aktionsergebnisse.

Grundsätzlich möchte ich eine einfache Möglichkeit, das zu tun, worüber in diesem Artikel gesprochen wird: http://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx

War es hilfreich?

Lösung

(Sehr!) Späte Antwort, aber diese Frage taucht in der Suchmaschinenergebnisse in der Nähe der Spitze auf, sodass es für zukünftige Menschen nützlich sein könnte, die hier landen.

Alternative für Teil 1:

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

Andere Tipps

Was ist los mit diesem für 304?

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

und dies für LastModified:

        Response.Cache.SetLastModified(DateTime.Now);

Oder vielleicht einfach eine erstellen "Nicht geändert" Filter.

Verwenden Sie das bereitgestellte Material, Sie können eine kleine Nützlichkeitsfunktion in Ihrem Controller erstellen

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

Dann benutze es so:

if (CheckStatus304(image.CreatedDate)) return Content(string.Empty);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top