26

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

4

1 回答 1

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

在此处输入图像描述

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

于 2013-06-25T00:07:26.897 回答