C# 如何缓存.NETWebAPI请求(使用w/AngularJS$http)

C# 如何缓存.NETWebAPI请求(使用w/AngularJS$http),c#,caching,angularjs,asp.net-web-api,C#,Caching,Angularjs,Asp.net Web Api,我有一个用ASP.NET编写的Web API,我正在通过AngularJS$http使用它 我在AngularJS工厂中启用了缓存,如下所示,但每个请求仍然返回200,从不200(来自缓存)或304(我所说的每个请求都是指在同一页面上多次发出相同的web api请求,重新访问我已经访问过的包含web api请求的页面,刷新所述页面等) 我是否遗漏了AngularJS方面的内容?或者这是一个Web API问题。或者两者兼而有之?结果证明这是一个Web API问题。我忽略了一个事实,即响应头明确指出

我有一个用ASP.NET编写的Web API,我正在通过AngularJS
$http
使用它

我在AngularJS工厂中启用了缓存,如下所示,但每个请求仍然返回
200
,从不
200(来自缓存)
304
(我所说的每个请求都是指在同一页面上多次发出相同的web api请求,重新访问我已经访问过的包含web api请求的页面,刷新所述页面等)


我是否遗漏了AngularJS方面的内容?或者这是一个Web API问题。或者两者兼而有之?

结果证明这是一个Web API问题。我忽略了一个事实,即响应头明确指出缓存已禁用

在Google Chrome的网络选项卡中查看的响应:

如上图所示,在Web API控制器中禁用缓存。即使是常规MVC控制器中使用的
[OutputCache]
属性也不受支持

幸运的是我找到了这个博客:

这让我想到了以下两种解决方案:

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

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

或者,如果我想,我可以使用以下内容:

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

乍一看,这似乎比CacheCow的方法要容易一些,如果需要的话,也更容易在以后重构

现在,其他请求给我一个
200(来自缓存)

刷新后给我一个未修改的
304


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

默认的无缓存头是ASP.NET或IIS,因为自托管Web API不能做到这一点。抱歉@Darreller不太清楚您的意思。您指的是哪种Web API?Web API是位于某个主机之上的框架:IIS/ASP.NET主机、WCF自托管主机st或某些基于Owin的主机。默认情况下插入的缓存头是由您正在使用的主机放在那里的,而不是web api本身。这并不是说它为您更改了任何内容,只是供参考。如果它在IIS下运行,则它不是自托管的。自托管意味着在Windows控制台或Windows服务中。不要忘记chrome具有如果开发人员工具处于打开状态,则会破坏缓存。这并不意味着这里就是这种情况,但如果启用,则可能会绊倒您,并且您正在观察网络选项卡,希望看到缓存头!
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;
    }]);