qualcuno può spiegarmi come implementare la memorizzazione nella cache delle azioni JsonResult
nell'applicazione MVC 5? Voglio utilizzare la memorizzazione nella cache di alcune azioni ajax
-called utilizzando l'attributo [OutputCache()]
. Alcune di queste azioni restituiscono ActionResult
con html
-content, alcune JsonResult
con elenchi serializzati di coppie {Id, Title}
che userò per creare elenchi a discesa.ASP .Net MVC 5 Cache JsonResult
Il mio obiettivo è ridurre la quantità di query DB (durante la creazione di ViewModels) e le richieste del server (quando si utilizza una chiamata -jax per esso).
Quindi, il mio codice è simile frammenti di seguito:
[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);
}
Quando guardo FireFox strumenti del pannello vedo immagine successiva per Html
-CONTENUTO:
Qui Firefox utilizza cache sul lato client versione di ajax
- pagina richiesta.
Ma la situazione è diversa con json
-CONTENUTO:
Essa non memorizza nella cache il contenuto, e sembra per trasferire i dati dal server (cache lato server).
In entrambi i casi, le intestazioni di risposta lo stesso aspetto: è richiesto
Cache-Control:"public, max-age=86400, s-maxage=0"
contenuti utilizzando simili ajax
-calls come
$.get(url, null, function(data){
//do something with data
});
Allora, come faccio a Cache JSON-contenuti? qual è il modo giusto per farlo e perché l'approccio predefinito non funziona?
Gli altri browser rispettano le intestazioni della cache? Sembra che FF ignori questo per richieste AJAX. È anche possibile utilizzare ObjectCache ('HttpContext.Current.Cache') per memorizzare il risultato da una query. – Jasen
@Jasen, in realtà quando apro il collegamento direttamente nel browser (senza 'ajax') il risultato è lo stesso comunque. Anche in Chrome la situazione sembra simile – teran
Hai provato questo? http://stackoverflow.com/questions/8535160/outputcache-attribute-and-jquery-ajax-not-caching –