如何缓存.NET Web API请求(& use w / AngularJS $ http)

时间:2013-06-25 00:07:27

标签: c# caching angularjs asp.net-web-api

我有一个用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问题。或两者兼而有之?

1 个答案:

答案 0 :(得分:51)

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

Google Chrome网络标签中的回复:

enter image description here

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)

enter image description here

刷新后给我一个304 Not Modified

enter image description here

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