AngularJs DELETE与数据集错误的内容类型标头

时间:2014-07-18 16:36:16

标签: angularjs angularjs-service

我正在使用有效负载制作$ http DELETE请求,但内容类型错误。我有一个数据对象,但内容类型设置为text / plain而不是application / json。从下面的代码和下面的网络请求中可以看到,实际上有一个带有值的数据对象。有没有解决这个问题?非常感谢!

代码:

    $http({  
        method: "DELETE",  
        url: ".../v2/places/" + place.id + "/locations/remove",  
        data: location,  
        headers: { Authorization: "Bearer " + rootServices.getToken() }  
    })  

chrome网络请求摘要:

  

远程地址:54.83.54.37:443
  网址:../ V2 /地区/ 53b43e03e4b00cb25bcb16af /位置/删除
  请求方法:DELETE
    状态代码:500内部服务器错误请求
  接受:application / json,text / plain,*/*
  接受编码:gzip,紧缩,SDCH
  接受语言:EN-US,EN; Q = 0.8
  授权:持票人......     连接:保持活跃
  内容长度:66
  内容类型:文本/无格式;字符集= UTF-8
  主持人:沙箱....净
  产地:127.0.0.1:9000
  的Referer:127.0.0.1:9000 /会话
  User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36
  (KHTML,与Gecko一样)Chrome / 35.0.1916.153 Safari / 537.36请求
  有效载荷:{房间:厨房,电器:冰箱,地板:主要   楼层}

2 个答案:

答案 0 :(得分:16)

您可以在标题中设置内容类型以及授权标题

$http({  
        method: "DELETE",  
        url: ".../v2/places/" + place.id + "/locations/remove",  
        data: location,  
        headers: {'Content-Type': 'application/json', Authorization: "Bearer " + rootServices.getToken() }  
    })  

或者你可以在app app中设置它们:

module.config(function($httpProvider) {
  //$http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'
  $httpProvider.defaults.headers.delete = { 'Content-Type' : 'application/json' };
});

文档声明:

  

设置HTTP标头$ http服务会自动添加某些内容   所有请求的HTTP标头。可以完全配置这些​​默认值   通过访问$ httpProvider.defaults.headers配置对象,   目前包含此默认配置:

     

$ httpProvider.defaults.headers.common(所有人都喜欢的标题   请求):接受:application / json,text / plain,* / *   $ httpProvider.defaults.headers.post :( POST的标头默认值   请求)Content-Type:application / json   $ httpProvider.defaults.headers.put(PUT请求的标头默认值)   Content-Type:application / json要添加或覆盖这些默认值,   只需在这些配置对象中添加或删除属性即可。至   为POST或PUT以外的HTTP方法添加标头,只需添加一个   使用小写的HTTP方法名称作为密钥的新对象,例如   `$ httpProvider.defaults.headers.get = {'My-Header':'value'}。

     

默认值也可以在运行时通过$ http.defaults对象设置   以同样的方式。例如:

https://docs.angularjs.org/api/ng/service/$http

答案 1 :(得分:2)

我发现了问题。 我们需要输入“content-type”而不是“Content-Type”。 如果我明白了,小写字母会覆盖前一个。

我将展示一个例子:

$scope.deleteObject = function (object) {
    var objectId = object.id;
    var url = '/services/rest/deleteObject/' + objectId;
    var config = {
        headers: {
            'content-type': 'application/json'
        }
    };
    $http.delete(url, config)

    .then(function (response) {
        DO SOMETHING

    }, function (error) {
        DO SOMETHING
    });

};