Я кеширую все, что возможно на веб-сайте ASP.NET MVC, и оно отлично работает. Теперь я создал API, в котором вызовы переходят в Действия контроллера. (http://mysite.com/topics/latest.json)
API может возвращать результаты в разных форматах (json, xml, rss).
Данные для возврата загружаются в Действие:
[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 и у меня нет представления, я не могу решить проблему таким способом.
Каковы ваши предложения по решению этой проблемы?