Проблема с изменением Content-Type для запросов POST с помощью ngResource (1.0.6 и 1.1.4)

Во-первых, я знаю, что этот вопрос задавался несколько раз. Я пробовал много опубликованных решений, и у меня ничего не работает.

Вот еще несколько мест, где об этом спрашивали:

Попытки:

var app = angular.module('theApp', ['app.services']);


app
  .config(['$httpProvider', function ($httpProvider) {
    // Try (1): This doesn't work
    $httpProvider.defaults.headers.common['Content-Type'] = 'application/json;charset=utf-8';
    // Try (2): This doesn't work either
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8';
  }])


angular.module('app.services', ['ngResource'])
  // Resource for Drupal system/connect.post API (via services.module)
  .factory('SystemConnect', function($resource, $http) {
    // Try (3): There's no way this should work. But what the hell let's try!
    $http.defaults.headers.common['Content-Type'] = 'application/json;charset=utf-8';
    $http.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8';

    return $resource('api/system/connect.json', {}, {
      post: {
        method: 'POST',
        params: { },
        isArray: true,
        // Try (4): This doesn't work either
        headers: { 'Content-Type': 'application/json;charset=utf-8' }
      }
    });
  });


function SomeCtrl($scope, SystemConnect) {
  // FAIL, this results in "406 Not Acceptable: Unsupported content type application/xml"
  $scope.user = SystemConnect.post();
}
app.controller('SomeCtrl', SomeCtrl);

Похоже, что многие люди уже решали это раньше. Может ли кто-нибудь любезно сообщить мне правильный способ сделать это?

PS: Как ни странно, при запуске этого кода в Firefox Angular использует «Content-Type: text/plain» для POST!?


person James Andres    schedule 08.05.2013    source источник
comment
Я помню, как читал, что вы должны включить контент в сообщение, чтобы оно приняло изменения вашего заголовка. Просто дикая догадка...   -  person Mike Robinson    schedule 08.05.2013
comment
Это был Майк! $scope.user = SystemConnect.post({}); работает, совершенно странно. Поместите это в ответ.   -  person James Andres    schedule 08.05.2013
comment
Самый простой ответ, рад помочь   -  person Mike Robinson    schedule 08.05.2013
comment
Какая из вышеперечисленных попыток (1-4) действительно работала в сочетании с .post({})?   -  person Ben Turner    schedule 14.11.2013


Ответы (1)


Я помню, как читал, что вы должны включить контент в сообщение, чтобы оно приняло изменения вашего заголовка.

$scope.user = SystemConnect.post({});
person Mike Robinson    schedule 08.05.2013