ASP .Net MVC 5 JsonResult кеширование
может кто-нибудь объяснить мне, как реализовать кэшированиеJsonResult
действия в приложении MVC 5? Я хочу использовать кеширование некоторыхajax
действия с использованием[OutputCache()]
приписывать. Некоторые из этих действий возвращаютсяActionResult
сhtml
Содержание, некоторыеJsonResult
с сериализованными списками{Id, Title}
пары, которые я собираюсь использовать для построения выпадающих списков.
Моя цель - уменьшить количество запросов к базе данных (при создании ViewModels) и запросов к серверу (при использовании для этого ajax-вызовов).
Итак, мой код выглядит как фрагменты ниже:
[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);
}
Когда я смотрю на панель инструментов Firefox, я вижу следующую картинку дляHtml
-поперечник:
Здесь Firefox использует кэшированную версию на стороне клиентаajax
запрошенная страница.
Но ситуация отличается сjson
-поперечник:
Он не кэширует контент и, похоже, передает данные с сервера (серверный кеш).
В обоих случаях заголовки ответа выглядят одинаково:
Cache-Control:"public, max-age=86400, s-maxage=0"
Контент запрашивается с использованием аналогичныхajax
звонки как
$.get(url, null, function(data){
//do something with data
});
Итак, как мне кешировать json-контент? Какой правильный способ сделать это, и почему подход по умолчанию не работает?