如何缓存.NET Web API请求(并使用w / AngularJS $ http)

我有一个用ASP.NET编写的Web API,我通过AngularJS $http消费。

我已经在我的AngularJS工厂中启用了缓存,如下所示,但每个请求仍然返回200的响应,从不返回200 (from cache)304 (并且每个请求我的意思是在同一页面上多次发出相同的web api请求,重新访问页面我已经访问过包含Web API请求,刷新所述页面等)。

 angular.module('mapModule') .factory('GoogleMapService', ['$http', function ($http) { var googleMapService = { getTags: function () { // $http returns a promise, which has a 'then' function, which also returns a promise return $http({ cache: true, dataType: 'json', url: '/api/map/GetTags', method: 'GET', data: '' }) .then(function (response) { return response.data; }); }; return googleMapService; }]); 

我是否遗漏了AngularJS方面的一些东西? 或者这是一个Web API问题。 或两者?

原来这是一个Web API的事情。 我忽略了这样一个事实,即响应标题清楚地表明缓存已被禁用。

在Google Chrome的“网络”标签中查看的回复:

在此处输入图像描述

经过进一步调查 (如上图所示),Web API控制器中禁用了缓存。 甚至不支持在常规MVC控制器中使用的[OutputCache]属性。

幸运的是我找到了这个博客: http : //www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/

这引出了我这两个解决方案:

  • ASP.NET Web API CacheOutput
  • CacheCow

我决定使用CacheOutput,因为它允许我使用以下属性:

[CacheOutputUntilToday] ,支持服务器和客户端缓存。

或者,如果我只想使用客户端缓存,我可以使用以下内容:

[CacheOutput(ClientTimeSpan = 100, ServerTimeSpan = 0)]

乍一看CacheCow的方法似乎有点容易。 如果需要,以后更容易重构。

现在额外的请求给了我200 (from cache)

在此处输入图像描述

刷新后给我一个304 Not Modified

在此处输入图像描述

问题解决了! 希望这有助于其他人。