在asp.net webservice中使用AngularJS$http,有没有办法设置请求头?

在asp.net webservice中使用AngularJS$http,有没有办法设置请求头?,asp.net,json,web-services,angularjs,Asp.net,Json,Web Services,Angularjs,关于通过asp.net Web服务检索数据,我刚刚遇到了一个奇怪的问题 使用JQuery的ajax方法时,头被正确设置,数据在JSON中被成功检索 JSON示例: $.ajax({ type: "GET", url: "service/TestService.asmx/GetTestData", contentType: "application/json; charset=utf-8", dataType: "json", success: callba

关于通过asp.net Web服务检索数据,我刚刚遇到了一个奇怪的问题

使用JQuery的ajax方法时,头被正确设置,数据在JSON中被成功检索

JSON示例:

$.ajax({
    type: "GET",
    url: "service/TestService.asmx/GetTestData",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: callback,
    error: function (err, xhr, res) {
      alert(err);
    }
  });
上面的请求标头如下所示:

Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Type    application/json; charset=utf-8
Host    localhost
Referer http://localhost/
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
X-Requested-With    XMLHttpRequest
Cache-Control   private, max-age=0
Content-Length  327
Content-Type    application/json; charset=utf-8
Date    Tue, 29 Oct 2013 17:59:56 GMT
Server  Microsoft-IIS/7.5
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
Cache-Control   private, max-age=0
Content-Encoding    gzip
Content-Length  341
Content-Type    text/xml; charset=utf-8
Date    Tue, 29 Oct 2013 17:59:56 GMT
Server  Microsoft-IIS/7.5
Vary    Accept-Encoding
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
上面的响应标题如下所示:

Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Type    application/json; charset=utf-8
Host    localhost
Referer http://localhost/
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
X-Requested-With    XMLHttpRequest
Cache-Control   private, max-age=0
Content-Length  327
Content-Type    application/json; charset=utf-8
Date    Tue, 29 Oct 2013 17:59:56 GMT
Server  Microsoft-IIS/7.5
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
Cache-Control   private, max-age=0
Content-Encoding    gzip
Content-Length  341
Content-Type    text/xml; charset=utf-8
Date    Tue, 29 Oct 2013 17:59:56 GMT
Server  Microsoft-IIS/7.5
Vary    Accept-Encoding
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
这个很好用

但是对于AngularJS$http方法,没有设置请求头内容类型值,因此响应头内容类型默认为
text/xml;字符集=utf-8
。请看下面的示例:

$http({
    method : 'GET',
    url: 'service/TestService.asmx/GetTestData',
    headers: {
      'Accept': 'application/json, text/javascript, */*; q=0.01',
      'Content-Type': 'application/json; charset=utf-8'
    }
  }).success(callback);
上面的请求头如下所示,您将看到缺少内容类型:

Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Host    localhost
Referer http://localhost/ComponentsAndRepos/
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
因此,上面的响应标题如下所示:

Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Type    application/json; charset=utf-8
Host    localhost
Referer http://localhost/
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
X-Requested-With    XMLHttpRequest
Cache-Control   private, max-age=0
Content-Length  327
Content-Type    application/json; charset=utf-8
Date    Tue, 29 Oct 2013 17:59:56 GMT
Server  Microsoft-IIS/7.5
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
Cache-Control   private, max-age=0
Content-Encoding    gzip
Content-Length  341
Content-Type    text/xml; charset=utf-8
Date    Tue, 29 Oct 2013 17:59:56 GMT
Server  Microsoft-IIS/7.5
Vary    Accept-Encoding
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
因此,这会强制响应以XML而不是JSON的形式返回,有没有办法解决这个问题

谢谢,

更新 感谢埃尔斯塔德·斯蒂芬

通过向
$http
方法添加
数据:{}
属性,可以解决这个问题

    $http({
    method : 'GET',
    url: 'service/TestService.asmx/GetTestData',
    data: {},
    headers: {
      'Accept': 'application/json, text/javascript, */*; q=0.01',
      'Content-Type': 'application/json; charset=utf-8'
    }
  }).success(callback);

您可以通过两种不同的方式处理此问题:

  • 您可以通过$httpProvider:.$http#description_setting-http-headers设置标头默认值
  • 您还可以使用Angular中的拦截器拦截$http的想法,以修改所有请求的配置对象:.$http#description#u拦截器
  • 您还可以像上面那样设置配置设置

  • 最重要的是,您可能误解了配置的工作原理。请看这里的问题:

    谢谢,现在我了解了AngularJS
    $http
    方法的工作原理。