AngularJS $ http提供程序未将cookie传递给.NET Web Service

时间:2013-05-20 02:09:49

标签: cookies angularjs http-headers

我在使用AngularJS中的$ http提供程序时遇到问题,无法对需要身份验证的.NET后端进行API调用。 .NET后端服务期望将“.ASPXAUTH”和“__RequestVerificationToken”cookie包含在调用中。

当我使用普通JS和.ajax时,在beforesend块中传递cookie可以正常工作。

$.ajax({
url: SERVER_URL + '/api/accounts',
type: 'GET',
dataType: 'json',
crossDomain: true,
xhrFields: {
withCredentials: true
},
success: function(data, status){
// ...
},
error: function (request, textStatus, errorThrown) {
// ...
},
beforeSend: function (req) {
    req.setRequestHeader("Cookie", REQUEST_VER_TOKEN);
    req.setRequestHeader("Cookie", ASPXAUTH_TOKEN);
}
});

在AngularJS中,我尝试在$ httpProvider和$ http调用中设置它但没有成功:

(在配置块中):

// ...
app.config(function ($routeProvider, $httpProvider) {
$httpProvider.defaults.headers.common[".ASPXAUTH"] = '....';
$httpProvider.defaults.headers.common["__RequestVerificationToken"] = '....';
$httpProvider.defaults.useXDomain = true; 
// ...

(在$ http电话中):

  $http({ url: 'http://SERVER_URL/api/accounts', method: 'GET',
          {headers: {
          '__RequestVerificationToken': '....',
          '.ASPXAUTH': '....'
          }}
          })
.success(function(data, status, headers, config) {
    // ...
         })
.error(function (data, status, headers, config) {
    // ...
         });

我收到401 Unauthorized错误。如果从服务器代码中删除了授权块,则代码无需插入标头即可运行。如何在AngularJS中模拟相同的beforesend块并确保在API调用期间将cookie传递给服务器?

1 个答案:

答案 0 :(得分:0)

您是否尝试不将标头参数传递给json对象,而是直接传递到headers属性?

$http({ url: 'http://SERVER_URL/api/accounts', method: 'GET',
      headers: {
      '__RequestVerificationToken': '....',
      '.ASPXAUTH': '....'
      }
}).success(function(data, status, headers, config) {
// ...
     })
.error(function (data, status, headers, config) {
// ...
});

希望它可以提供帮助。