我有一个用ASP.NET编写的Web API,我通过AngularJS $http
消费。
我已在AngularJS工厂中启用了缓存,如下所示,但每个请求仍会返回200
,而不是200 (from cache)
或304
的响应(并且每次请求都表示制作相同的网页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问题。或两者兼而有之?
答案 0 :(得分:51)
原来这是一个Web API的事情。我忽略了这样一个事实,即响应标题清楚地表明缓存已被禁用。
Google Chrome网络标签中的回复:
在further investigation上(如上图所示),在Web API控制器中禁用缓存。甚至不支持在常规MVC控制器中使用的[OutputCache]
属性。
幸运的是我找到了这个博客: http://www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/
这引出了我这两个解决方案:
我决定使用CacheOutput,因为它允许我使用以下属性:
[CacheOutputUntilToday]
支持服务器&客户端缓存。
或者如果我想just use client-side caching我可以使用类似的东西:
[CacheOutput(ClientTimeSpan = 100, ServerTimeSpan = 0)]
乍一看,CacheCow的方法似乎更容易一些。如果需要,以后更容易重构。
现在其他请求会给我一个200 (from cache)
:
刷新后给我一个304 Not Modified
:
问题解决了!希望这有助于其他人。