2013-06-25 12 views
24

मेरे पास ASP.NET में लिखा गया एक वेब एपीआई है जिसे मैं AngularJS $http के माध्यम से उपभोग कर रहा हूं।

मैं अपने AngularJS कारखाने में संचयन सक्षम किया इस प्रकार है लेकिन हर अनुरोध अभी भी 200 की एक प्रतिक्रिया है, कभी नहीं 200 (from cache) या 304 रिटर्न (और हर अनुरोध के द्वारा मैं एक ही पृष्ठ पर एक ही वेब 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 पक्ष से कुछ याद आ रही है? या यह एक वेब एपीआई समस्या है। अथवा दोनों?

उत्तर

49

बाहर निकलता है यह एक वेब एपीआई चीज थी। मैं इस तथ्य को अनदेखा कर दूंगा कि प्रतिक्रिया शीर्षलेख ने स्पष्ट रूप से कहा था कि कैशिंग अक्षम कर दी गई थी।

रिस्पांस गूगल क्रोम के नेटवर्क टैब में देखा के रूप में:

enter image description here

further investigation पर (और जैसा कि ऊपर छवि में देखा), कैशिंग वेब एपीआई नियंत्रकों में अक्षम है। यहां तक ​​कि [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

समस्या हल! मनाइए कि यह किसी और के लिए सहायक हो।

+2

डिफ़ॉल्ट नो-कैश हेडर या तो एएसपी.नेट या आईआईएस चीज हैं क्योंकि स्वयं-होस्ट किए गए वेब एपीआई ऐसा नहीं करते हैं। –

+0

क्षमा करें @DarrelMiller यह भी सुनिश्चित नहीं है कि आपका क्या मतलब है। आप किस तरह का वेब एपीआई का जिक्र कर रहे हैं? – GFoley83

+2

वेब एपीआई एक ढांचा है जो कुछ होस्ट के शीर्ष पर बैठता है: या तो आईआईएस/एएसपी।नेट होस्ट, एक डब्ल्यूसीएफ सेल्फ होस्ट या कुछ ओविन आधारित मेजबान। डिफ़ॉल्ट रूप से डाले गए कैशिंग हेडर जिन्हें आप होस्ट कर रहे हैं, वहां वेब एपीआई नहीं हो सकते हैं। यह नहीं कि यह आपके लिए कुछ भी बदलता है, केवल एक एफवाईआई। –

संबंधित मुद्दे