Я кэширую все, что возможно на веб-сайте ASP.NET MVC, и оно отлично работает. Теперь я создал API, в котором вызовы переходят в действия контроллера. (http://mysite.com/topics/latest.json)
API может возвращать результаты в разных форматах (json, xml, rss). Данные для возврата загружаются в Action:
[ResponseFilter]
public class HotTopicsController : Controller
{
[OutputCache(Duration = 60, VaryByParam = "none")]
public ActionResult Latest()
{
ViewData.Model = MyService.GetRepository().ApiViewData().Topics().Latest();
return View();
}
}
ResponseFilter отвечает за возврат данных в правильном формате (json, rss, xml).
Поскольку невозможно делать запросы JSON из другого домена (я хочу сделать API доступным для других), я должен использовать JSONP. JSONP требует набора обратного вызова.
Необходимость установки имени обратного вызова в ответе Я не могу выполнить кэширование по умолчанию с помощью OutputCache.
Я знаю статьи о кэшировании пончиков (Фил Хаакед: http://haacked.com/archive/2008/11/05/donut-caching-in-asp.net-mvc.aspx и другие). Но все они занимаются этой темой в Views. Поскольку я только что установил ViewData.Model и не имею представления, я не могу решить проблему таким образом.
Каковы ваши предложения по решению этой проблемы?