Подтвердить что ты не робот

Как кэшировать запросы веб-API.NET(и использовать w/AngularJS $http)

У меня есть веб-API, написанный на ASP.NET, который я потребляю через AngularJS $http.

Я включил кеширование в моем AngularJS factory следующим образом, но каждый запрос по-прежнему возвращает ответ 200, never 200 (from cache) или 304 (и по каждому запросу я имею в виду многократное повторение одного и того же запроса веб-api на той же странице, пересматривая страницу, которую я уже посетил, которая содержит запрос веб-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? Или это проблема веб-API. Или оба?

4b9b3361

Ответ 1

Оказывается, это была вещь веб-API. Я бы упустил тот факт, что заголовок ответа четко заявил, что кеширование отключено.

Ответ, как показано на вкладке "Сеть" Google Chrome:

enter image description here

После дальнейшего расследования (и, как видно на изображении выше), кеширование отключено в контроллерах Web API. Даже атрибут [OutputCache], который используется в обычных контроллерах MVC, не поддерживается.

К счастью, я нашел этот блог: http://www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/

которые приводят меня к этим двум решениям:

Я решил пойти с CacheOutput, поскольку он позволяет мне использовать такие атрибуты, как:

[CacheOutputUntilToday], который поддерживает кеширование на стороне сервера и клиента.

Или, если бы я хотел просто использовать кеширование на стороне клиента Я могу использовать что-то вроде:

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

Казалось, что на первый взгляд кажется, что CacheCow подходит. И проще реорганизовать позже, если потребуется.

Теперь дополнительные запросы дают мне 200 (from cache):

enter image description here

С обновлением, дающим мне 304 Not Modified:

enter image description here

Проблема решена! Надеюсь, это поможет кому-то еще.