19

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

ほとんど変更されない(ほとんど静的な)データを返すアクションがあります。

次の簡単な方法はありますか?

  1. アクションから304「未変更」を返します。
  2. 応答に「Last-Modified」タイムスタンプを含めます。

return Content('my data');アクション結果に使用します。

基本的に、この記事で説明されていることを簡単に実行する方法が必要です:http ://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx

4

3 に答える 3

16

(非常に!)遅い答えですが、この質問は検索エンジンの結果の上部近くに表示されるので、ここに着陸する将来の人々に役立つかもしれません。

パート1の代替案:

return new HttpStatusCodeResult(304, "Not Modified");
于 2012-09-20T21:36:30.500 に答える
10

304のこれの何が問題になっていますか?

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

そしてこれはLastModifiedの場合:

        Response.Cache.SetLastModified(DateTime.Now);

または、 「変更されていない」フィルターを作成するだけかもしれません。

于 2011-04-27T20:38:30.047 に答える
1

提供された資料を使用すると、コントローラーに小さな効用関数を作成できます

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);
于 2016-08-26T09:00:23.060 に答える