Кэш вывода ASP.NET MVC JSONP

Я кэширую все, что возможно на веб-сайте 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 и не имею представления, я не могу решить проблему таким образом.

Каковы ваши предложения по решению этой проблемы?


person chbu    schedule 01.03.2010    source источник


Ответы (2)


Вы всегда можете использовать предопределенное имя обратного вызова. Такие клиенты, как jQuery.ajax, позволяют указать имя параметра обратного вызова.

person Darin Dimitrov    schedule 01.03.2010

Один из ответов - использовать GetScript вместо GetJSON. Я писал об этом здесь: http://mfriis.blogspot.com/2012/03/caching-jsonp-requests-in-mvc3.html.

Однако мое решение основано на MVC3.

person mfriis    schedule 20.03.2012