GFo*_*y83 26 c# caching asp.net-web-api angularjs
我有一个用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问题.或两者?
GFo*_*y83 51
原来这是一个Web API的事情.我忽略了这样一个事实,即响应标题清楚地表明缓存已被禁用.
在Google Chrome的"网络"标签中查看的响应:

经过进一步调查(如上图所示),Web API控制器中禁用了缓存.甚至[OutputCache]不支持在常规MVC控制器中使用的属性.
幸运的是我找到了这个博客:http: //www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/
这引出了我这两个解决方案:
我决定使用CacheOutput,因为它允许我使用如下属性:
[CacheOutputUntilToday] 它支持服务器和客户端缓存.
或者,如果我只想使用客户端缓存,我可以使用类似的东西:
[CacheOutput(ClientTimeSpan = 100, ServerTimeSpan = 0)]
乍一看CacheCow的方法似乎有点容易.如果需要,以后更容易重构.
现在额外的请求给了我一个200 (from cache):

刷新给我一个304 Not Modified:

问题解决了!希望这有助于其他人.
| 归档时间: | 
 | 
| 查看次数: | 17043 次 | 
| 最近记录: |