2013-06-25 30 views
24

Tôi có một API Web viết bằng ASP.NET mà tôi đang tiêu thụ thông qua AngularJS $http.

tôi đã kích hoạt bộ nhớ đệm trong nhà máy AngularJS của tôi như sau nhưng mọi yêu cầu vẫn trả về một phản ứng của 200, không bao giờ 200 (from cache) hoặc 304 (và bởi mọi yêu cầu tôi có nghĩa là làm cho cùng một yêu cầu api web nhiều lần trên cùng một trang, xem xét lại một trang Tôi đã truy cập có chứa một yêu cầu API Web, làm mới trang đã nói, v.v.).

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; 
    }]); 

Tôi có thiếu thứ gì đó từ phía AngularJS không? Hay đây là một vấn đề về Web API. Hoặc cả hai?

Trả lời

49

Hóa ra đó là một điều Web API. Tôi đã bỏ qua thực tế là tiêu đề phản hồi đã tuyên bố rõ ràng rằng bộ nhớ đệm đã bị tắt.

đáp ứng như xem trong tab Mạng của Google Chrome:

enter image description here

Khi further investigation (và như đã thấy trong hình trên), bộ nhớ đệm bị vô hiệu hóa trong bộ điều khiển Web API. Ngay cả thuộc tính [OutputCache], được sử dụng trong bộ điều khiển MVC thông thường, không được hỗ trợ.

May mắn tôi thấy blog này: http://www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/

mà đưa tôi đến với hai giải pháp sau đây:

Tôi quyết định đi với CacheOutput vì nó cho phép tôi sử dụng các thuộc tính như:

[CacheOutputUntilToday] hỗ trợ máy chủ & lưu vào bộ đệm phía máy khách.

Hoặc nếu tôi muốn just use client-side caching tôi có thể sử dụng một cái gì đó như:

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

Mà dường như dễ dàng hơn một chút ở cái nhìn đầu tiên mà cách tiếp cận CacheCow của. Và dễ dàng hơn để cấu trúc lại sau này nếu cần thiết.

Bây giờ yêu cầu bổ sung cho tôi một 200 (from cache):

enter image description here

Với refresh cho tôi một 304 Not Modified:

enter image description here

Vấn đề giải quyết! Hy vọng điều này sẽ giúp người khác.

+2

Các tiêu đề không có bộ nhớ cache mặc định là ASP.NET hoặc IIS vì Web API tự lưu trữ không làm điều đó. –

+0

Xin lỗi @DarrelMiller không quá chắc chắn ý bạn là gì. Bạn đang nhắc đến loại API Web nào? – GFoley83

+2

Web API là một khung công tác nằm trên một số máy chủ: Hoặc là IIS/ASP.NET host, WCF Self-Host hoặc một số máy chủ lưu trữ dựa trên Owin. Các tiêu đề bộ nhớ đệm bạn đang thấy được chèn theo mặc định đang được đặt ở đó bởi máy chủ bạn đang sử dụng, không phải là bản thân trang web. Không phải là nó thay đổi bất cứ điều gì cho bạn, chỉ là một FYI. –

Các vấn đề liên quan