может кто-нибудь объяснить мне, как реализовать кэширование JsonResult
действий в приложении MVC 5? Я хочу использовать кеширование некоторых ajax
-описанных действий с использованием атрибута [OutputCache()]
. Некоторые из этих действий возвращают ActionResult
с html
-content, некоторые JsonResult
с сериализованными списками из {Id, Title}
пар, которые я собираюсь использовать для выпадающих списков.ASP .Net MVC 5 Кэширование JsonResult
Моя цель - уменьшить количество запросов БД (при построении 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
-calls как
$.get(url, null, function(data){
//do something with data
});
Итак, как я кэшировать JSON-контент? как правильно это сделать, и почему подход по умолчанию не работает?
Другие браузеры относятся к заголовкам кеша? Кажется, FF игнорирует это для запросов AJAX. Вы также можете использовать ObjectCache ('HttpContext.Current.Cache') для хранения результата из запроса. – Jasen
@Jasen, на самом деле, когда я открываю ссылку непосредственно в браузере (без 'ajax'), результат все равно будет. В Chrome ситуация также выглядит аналогично – teran
Вы попробовали? http://stackoverflow.com/questions/8535160/outputcache-attribute-and-jquery-ajax-not-caching –