kann mir jemand erklären, wie man Caching von JsonResult
Aktionen in MVC 5 Anwendung implementieren? Ich möchte Caching von einigen ajax
-aufgerufenen Aktionen mit Attribut verwenden. Einige dieser Aktionen geben ActionResult
mit html
-content, einige JsonResult
mit serialisierten Listen von {Id, Title}
-Paaren zurück, die ich verwenden werde, um Dropdown-Listen zu erstellen.ASP.Net MVC 5 JsonResult Caching
Mein Ziel ist es, die Anzahl der DB-Abfragen (beim Erstellen von ViewModels) und Serveranforderungen (bei Verwendung von Ajax-Aufrufe dafür) zu reduzieren.
So sieht mein Code wie Schnipsel unten:
[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);
}
Wenn ich FireFox Tools-Panel sehe ich das nächste Bild zu sehen für Html
-Gehalts:
hier Firefox verwendet clientseitige gecached Version von ajax
angeforderte Seite.
Aber Situation unterscheidet sich json
-Gehalts:
Es spielt keine Inhalte zwischenzuspeichern, und scheint Daten vom Server (Server-Side-Cache) zu übertragen.
In beiden Fällen Response-Header gleich aussehen:
Cache-Control:"public, max-age=86400, s-maxage=0"
Inhalt angefordert wird ähnlich ajax
-calls wie
$.get(url, null, function(data){
//do something with data
});
Also, wie Cache-I json-Inhalte? Was ist der richtige Weg, und warum Standardansatz nicht funktioniert?
Betreffen andere Browser die Cache-Header? Scheint FF ignoriert dies für AJAX-Anfragen. Sie können auch den ObjectCache ('HttpContext.Current.Cache') verwenden, um das Ergebnis einer Abfrage zu speichern. – Jasen
@Jasen, eigentlich wenn ich Link direkt im Browser öffne (ohne 'Ajax') Ergebnis ist das gleiche trotzdem. In Chrome Situation sieht auch ähnlich – teran
Haben Sie das versucht? http://stackoverflow.com/questions/8535160/outputcache-attribute-and-jquery-ajax-not-caching –