60 votes

Angular, le type de contenu n'est pas envoyé avec $http

Angular n'ajoute pas l'option de type de contenu correcte, j'ai essayé la commande suivante :

$http({
    url: "http://localhost:8080/example/teste",
    dataType: "json",
    method: "POST",
    headers: {
        "Content-Type": "application/json"
    }
}).success(function(response){
    $scope.response = response;
}).error(function(error){
    $scope.error = error;
});

Le code ci-dessus génère la requête http suivante :

POST http://localhost:8080/example/teste HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 0
Cache-Control: no-cache
Pragma: no-cache
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
Content-Type: application/xml
Accept: application/json, text/plain, */*
X-Requested-With: XMLHttpRequest
Referer: http://localhost:8080/example/index
Accept-Encoding: gzip,deflate,sdch
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: JSESSIONID=C404CE2DA653136971DD1A3C3EB3725B

Comme vous pouvez le constater, au lieu de "application/json", le type de contenu est "application/xml". Est-ce que j'ai oublié quelque chose ici ?

0voto

aUXcoder Points 848

Juste pour montrer un exemple de comment ajouter dynamiquement l'en-tête "Content-type" à chaque requête POST. Dans mon cas, je passe les paramètres POST en tant que chaîne de requête, cela se fait en utilisant transformRequest. Dans ce cas, sa valeur est application/x-www-form-urlencoded.

// définir le Content-Type pour les requêtes POST
angular.module('myApp').run(basicAuth);
function basicAuth($http) {
    $http.defaults.headers.post = {'Content-Type': 'application/x-www-form-urlencoded'};
}

Ensuite depuis l'intercepteur dans la méthode de requête avant de retourner l'objet de configuration

// si l'en-tête['Content-type'] est un POST alors ajouter des données
'request': function (config) {
  if (
    angular.isDefined(config.headers['Content-Type']) 
    && !angular.isDefined(config.data)
  ) {
    config.data = '';
  }
  return config;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X