Cache do ASP .Net MVC 5 JsonResult
alguém pode me explicar como implementar o cache deJsonResult
ações no aplicativo MVC 5? Eu quero usar o cache de algunsajax
ações chamadas usando[OutputCache()]
atributo. Algumas dessas ações retornamActionResult
comhtml
-content, someJsonResult
com listas serializadas de{Id, Title}
pares que vou usar para criar listas suspensas.
Meu objetivo é reduzir a quantidade de consultas ao banco de dados (ao criar ViewModels) e solicitações do servidor (ao usar chamadas ajax).
Portanto, meu código se parece com os trechos abaixo:
[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 olho para o painel de ferramentas do FireFox, vejo a próxima foto paraHtml
-conteúdo:
Aqui, o Firefox usa a versão em cache do cliente doajax
página solicitada.
Mas a situação difere comjson
-conteúdo:
Ele não armazena em cache o conteúdo e parece transferir dados do servidor (cache do servidor).
Nos dois casos, os cabeçalhos de resposta têm a mesma aparência:
Cache-Control:"public, max-age=86400, s-maxage=0"
O conteúdo é solicitado usandoajax
-liga como
$.get(url, null, function(data){
//do something with data
});
Então, como faço para armazenar em cache o conteúdo json? qual é a maneira correta de fazer isso e por que a abordagem padrão não funciona?