【问题标题】:How to cache .NET Web API requests (& use w/ AngularJS $http)如何缓存 .NET Web API 请求(并使用 AngularJS $http)
【发布时间】:2013-06-21 15:34:02
【问题描述】:

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

我已经在我的 AngularJS 工厂中启用了缓存,如下所示,但每个请求仍然返回 200 的响应,而不是 200 (from cache)304(每个请求我的意思是在同一页面,重新访问我已经访问过的包含 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 问题。还是两者兼有?

【问题讨论】:

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


    【解决方案1】:

    原来这是一个 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

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

    【讨论】:

    • 默认的无缓存标头是 ASP.NET 或 IIS,因为自托管 Web API 不这样做。
    • 对不起@DarrelMiller 不太清楚你的意思。您指的是哪种 Web API?
    • Web API 是一个位于某些主机之上的框架:IIS/ASP.NET 主机、WCF 自主机或某些基于 Owin 的主机。您看到的默认插入的缓存标头是由您正在使用的主机放置的,而不是 Web api 本身。并不是说它对您有任何改变,只是仅供参考。
    • 如果它在 IIS 下运行,那么它不是自托管的。自托管意味着在 Windows 控制台或 Windows 服务中。
    • 不要忘记,chrome 有一个设置,如果开发人员工具打开,它会破坏缓存。并不意味着这里就是这种情况,但如果启用,并且您正在观察期望看到缓存标头的网络选项卡,可能会绊倒您!
    猜你喜欢
    • 2018-07-25
    • 2021-04-29
    • 2019-11-08
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多