Как указать параметр заголовков для пользовательских действий Angular $resource - программирование

Как указать параметр заголовков для пользовательских действий Angular $resource

Следующее работает отлично, но я думаю, что это изменяет $httpProvider глобально, чего я не хочу.

angular.module('SessionService', ['ngResource'])
    .config(function($httpProvider){
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
    })
    .factory('Login', function($resource){
        var resource = $resource('/adminui/login',{},{
            post:{
                method:"POST",
                isArray:false
            },
        });
        return resource;
    })
LoginCtrl = function($scope,Login) {
    $scope.login = function(){
        Login.post($.param({user:$scope.user.username,password:$scope.user.password}),$.noop,$.noop)
    }
}

Есть ли способ сделать это вместо этого?

...
    .factory('Login', function($resource){
        var resource = $resource('/adminui/login',{},{
            post:{
                method:"POST",
                isArray:false,
                headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} // ignored
            },
        });
        return resource;
    })

Параметр "заголовки", кажется, игнорируется. запрос все еще

Content-Type:application/json;charset=UTF-8

Мое значение для заголовков в порядке?

4b9b3361

Ответ 1

Я подтвердил, что 1.1.3 действительно поддерживает это. Однако вам нужно убедиться, что вы также получите версию ресурсной службы версии 1.1.3. Быстрый тест:

angular.module('myApp', ['ngResource']).
  config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/', {templateUrl: 'partials/partial1.html',controller: 'MyController'});
    $routeProvider.otherwise({redirectTo: '/'});
  }])

  .controller("MyController", function( $scope, Bug) {
    Bug.post({test:"test"});
  })

  .factory('Bug', function($resource){
    var resource = $resource('/bug',{},{
        post:{
            method:"POST",
            isArray:false,
            headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} 
        },
    });
    return resource;
});

Это сделает запрос с установленными заголовками (подтвержденными с помощью Chrome):

Content-Type:application/x-www-form-urlencoded; charset=UTF-8

Быстрое замечание, мне не удалось найти загрузку angular -resource.js, поэтому мне пришлось зайти на сайт github, чтобы загрузить его. Это здесь.

Для некоторых хихиканья я создал скрипку. Обратите внимание, что будет неудачный вызов POST, но его заголовки установлены правильно. Пример скрипта

Ответ 2

Пока документы разработки (по состоянию на 12 октября) показывают, что переопределение заголовков возможно в $resource, оно еще не выпущено (v1.0.2 или v1.1.0). Однако функция находится в v1.0.x и главных ветвях. Чтобы получить эту функцию, вы можете подумать о создании из ветки v1.0.x на данный момент.

Как построить: http://docs.angularjs.org/#H1_4

В качестве альтернативы вы можете извлечь из сборки моментальных снимков: http://code.angularjs.org/snapshot/

Похоже, эта функция будет в следующей версии.

Ответ 3

Просто добавив ссылку на файлы ресурсов 1.1.5 (и другие): http://code.angularjs.org/1.1.5/

Вы можете установить URL-адрес в соответствии с той версией, которую вы ищете.
например 1.1.4: http://code.angularjs.org/1.1.4/