誰かがMVC 5アプリケーションでJsonResult
アクションのキャッシングを実装する方法を教えてもらえますか? ajax
の呼び出しを、[OutputCache()]
属性を使用して呼び出したいとします。これらのアクションの一部は、とhtml
という内容のコンテンツを返します。{Id, Title}
という一連のリストを持つJsonResult
のペアは、ドロップダウンリストの作成に使用します。ASP .Net MVC 5 JsonResultキャッシング
私の目標は、(ViewModelsの構築中に)DB問合せの量を減らし、サーバー要求(ajax呼び出しを使用する場合)の量を減らすことです。
ここでFirefoxは、クライアント側のキャッシュされたを使用しています:Html
- 含有量のために、私はFireFoxのツールパネルを見てみると
[OutputCache(Duration=60*60*24)]
public async Task<ActionResult> SearchCaseOrgDialog(){
//extract data return html page
return View();
}
[OutputCache(Duration=60*60*24)]
public async Task<JsonResult> AjaxOrgDepartments(){
//query database, serialize data, return json
var result = await ctx.OrgDepartments
.Select(d => new {
Id = d.Id,
Title = d.Title }
)
.ToListAsync();
return Json(result, JsonRequestBehavior.AllowGet);
}
私が見る次の画像:
だから、私のコードは次のスニペットのようになります。 ajax
- 要求されたページのバージョン。
それは、コンテンツをキャッシュし、サーバ(サーバ側のキャッシュ)からデータを転送するようではありません。どちらの場合も、レスポンスヘッダで
は同じように見える:
Cache-Control:"public, max-age=86400, s-maxage=0"
コンテンツが要求され
ので$.get(url, null, function(data){
//do something with data
});
のように似たajax
-callsを使用して、私はJSON-コンテンツをキャッシュしますか?それを行う正しい方法は何ですか?また、デフォルトのアプローチが機能しない理由は何ですか?
他のブラウザはキャッシュヘッダーを尊重していますか? FFがAJAX要求に対してこれを無視しているようです。また、ObjectCache( 'HttpContext.Current.Cache')を使用してクエリの結果を格納することもできます。 – Jasen
@ジャセン、実際にブラウザで直接リンクを開くと(「ajax」なしで)結果は同じです。 Chromeの状況でも同様に見える – teran
これを試しましたか? http://stackoverflow.com/questions/8535160/outputcache-attribute-and-jquery-ajax-not-caching –