c# - world - udemy net core angular



Cómo almacenar en caché las solicitudes de la API web.NET(y usar w/AngularJS $ http) (1)

Tengo una API web escrita en ASP.NET que estoy consumiendo a través de AngularJS $http .

He habilitado el almacenamiento en caché en mi fábrica de AngularJS de la siguiente manera, pero cada solicitud sigue arrojando una respuesta de 200 , nunca 200 (from cache) o 304 (y con cada solicitud me refiero a hacer la misma solicitud de API varias veces en la misma página, revisitando un página que ya he visitado que contiene una solicitud de API web, refrescando dicha página, etc.).

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

¿Me estoy perdiendo algo del lado angular de las cosas? ¿O es este un problema de la API web? ¿O ambos?


Resulta que era una cosa de API web. Había pasado por alto el hecho de que el encabezado de respuesta indicaba claramente que el almacenamiento en caché estaba deshabilitado.

Respuesta tal como se ve en la pestaña Red de Google Chrome:

Tras una investigación adicional (y como se ve en la imagen anterior), el almacenamiento en caché está deshabilitado en los controladores de la API web. Incluso el atributo [OutputCache] , que se usa en los controladores MVC normales, no es compatible.

Afortunadamente, encontré este blog: http://www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/

que me llevan a estas dos soluciones:

Decidí usar CacheOutput porque me permite usar atributos como:

[CacheOutputUntilToday] que admite el almacenamiento en caché del lado del servidor y del cliente.

O si solo quisiera usar el caché del lado del cliente, puedo usar algo como:

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

Lo que pareció un poco más fácil a primera vista que el enfoque de CacheCow. Y más fácil refactorizar más adelante si es necesario.

Ahora las solicitudes adicionales me dan un 200 (from cache) :

Con una actualización dándome un 304 Not Modified :

¡Problema resuelto! Espero que esto ayude a alguien más.





asp.net-web-api