ASP.NET MVC:304「変更されていない」ステータスを返すにはどうすればよいですか?
-
25-10-2019 - |
質問
ASP.NET MVC 3.0、IIS 7、.NET 4
めったに変化しないデータを返すアクションがあります(ほぼ静的)。
簡単な方法はありますか:
- アクションから304「変更されていない」を返します。
- 応答に「ラスト変更された」タイムスタンプを含めます。
私が使う 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);
所属していません StackOverflow