小编典典

角度,使用资源时无法正确生成内容类型

angularjs

我在Angular上使用资源尝试了以下命令:

angular.module('appServices', ['ngResource']).factory('Example', 
        function($resource){

            return $resource('http://api.example.com.br/teste', {}, {
                query: {method:'GET', headers: {'Content-Type': 'application/json'}}
        });
});

但是无法正确生成http内容类型,在这种情况下为“ application / json”。

我已经看到类似的问题,例如AngularJS资源未设置Content-Type,但是我拥有最新的Angular版本(1.0.6 / 1.1.4)。

上面的代码有什么问题?

结论

  • 如以下所述,HTTP Get方法不应具有主体。
  • 属性标头在上述版本中不起作用。我未成功使用以下命令:query:{method:’POST’,headers:{‘Content-Type’:’application / json’}}
  • 这种方式对我有用:$ http.defaults.headers.put [‘Content-Type’] =’application / json’;

阅读 224

收藏
2020-07-04

共1个答案

小编典典

查看1.1.4版中的角度源,第8742行:

  // strip content-type if data is undefined
  if (isUndefined(config.data)) {
    delete reqHeaders['Content-Type'];
  }

所述Content-Type,如果请求不包含任何数据(请求主体)报头被除去。

我认为这是预期的行为,因为 GET 请求没有主体

另一方面,只要POST方法在请求正文中有数据,它就会按照您的期望设置内容类型。尝试以下方法:

将方法更改为 POST

query: {method:'POST', headers: {'Content-Type': 'application/json'}}

并使用一些参数调用您的资源操作:

Example.query(yourData)

在这种情况下,内容类型设置正确。

编辑

似乎它也可以与get一起使用,在这种情况下,数据位于第二个参数中:

Example.query(yourParams, yourData)

范例:http//jsfiddle.net/WkFHH/

2020-07-04