ASP.NET MVC OutputCache JSONP - PullRequest
       24

ASP.NET MVC OutputCache JSONP

4 голосов
/ 01 марта 2010

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

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

Ответы [ 2 ]

3 голосов
/ 01 марта 2010

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

0 голосов
/ 20 марта 2012

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

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

...