2013-06-25 28 views
24

Ben angularjs $http yoluyla tüketen ediyorum ASP.NET ile yazılmış bir Web API vardır.

izler ama her istek hala 200 bir tepkiyi, asla 200 (from cache) veya 304 döndürür (ve her isteği ile ben yeniden ziyaret, aynı sayfada aynı web api isteği defalarca yapma not ortalamalarının benim angularjs fabrikada önbelleğe alma sağladı bir Bu sayfayı ziyaret ettim, bir Web API isteği içeriyor, söz konusu sayfayı yenilemek vb.).

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 tarafında bir şey eksik mi? Veya bu bir Web API problemidir. Ya da her ikisi de?

cevap

49

bir Web API şeydi çıkıyor. Yanıt üstbilgisinin önbelleklemenin devre dışı bırakıldığını açıkça belirttiği gerçeğini göz ardı etmiş olurdum. Google Chrome Ağı sekmesine bakıldığında

Yanıt: (yukarıdaki resimde görüldüğü gibi ve) further investigation üzerine

enter image description here

, önbelleğe alma Web API kontrolörleri devre dışıdır. Hatta düzenli MVC denetleyicileri kullanılan [OutputCache] nitelik, desteklenmemektedir. http://www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/

bu iki çözümlere bana yol: Ben sağlar gibi CacheOutput ile gitmeye karar verdi

Neyse ki bu blogu buldum

: benim gibi özelliklerini kullanmak İstemci & İstemci tarafı önbelleğe almayı destekleyen 210

[CacheOutputUntilToday]. İlk bakışta bu CacheCow yaklaşımı biraz daha kolay görünüyordu

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

: gibi

Ya just use client-side caching isteseydim kullanabilirsiniz şey. Gerekirse daha sonra yeniden hesaplamak daha kolay. Bana veren yenileme ile

enter image description here

bir 304 Not Modified:

Şimdi ek istekler bana 200 (from cache) vermek

enter image description here

Sorun çözüldü! Umarım bu bir başkasına yardım eder.

+2

Varsayılan olarak, önbelleğe alınmamış üstbilgiler ya ASP.NET ya da IIS olayıdır çünkü kendi kendini barındırılan Web API'sı bunu yapmaz. –

+0

Maalesef @DarrelMiller ne demek istediğini çok emin değil. Ne tür bir Web API'sı için başvuruyorsunuz? IIS/ASP Ya: – GFoley83

+2

Web API bazı konak üstüne oturur bir çerçevedir.NET host, bir WCF Self-Host veya bazı Owin tabanlı bir ev sahibi. Varsayılan olarak eklendiğini gördüğünüz önbellek başlıkları, kullandığınız ana bilgisayar tarafından değil, web api'nin kendisi tarafından konur. Sizin için bir şey değiştirmez, sadece bir FYI. –