4

我缓存了 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 进行默认缓存。

我知道有关甜甜圈缓存的文章(Phil Haacked:http://haacked.com/archive/2008/11/05/donut-caching-in-asp.net-mvc.aspx)。但他们都在视图中处理这个主题。由于我只是设置 ViewData.Model 并且没有视图,因此我无法以这种方式解决问题。

你对解决这个问题有什么建议?

4

2 回答 2

3

您始终可以使用预定义的回调名称。jQuery.ajax等客户端允许您指定回调参数的名称。

于 2010-03-01T16:55:23.660 回答
0

一种答案是使用 GetScript 而不是 GetJSON。我在这里写了一篇博客:http: //mfriis.blogspot.com/2012/03/caching-jsonp-requests-in-mvc3.html

但是,我的解决方案基于 MVC3。

于 2012-03-20T11:10:23.610 回答