ASP.NET MVC:304「変更されていない」ステータスを返すにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/5809987

質問

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

そして、これはlastmodifiedのために:

        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