2013-05-20 102 views
4

我在使用AngularJS中的$ http提供程序對需要身份驗證的.NET後端進行API調用時遇到問題。 .NET後端服務期望在調用中包含「.ASPXAUTH」和「__RequestVerificationToken」cookie。

當我使用普通的JS和.ajax時,在beforesend塊中傳遞cookies工作。

$.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 call):

$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未經授權的錯誤。如果從服務器代碼中刪除授權塊,則代碼無需插入標頭即可工作。如何在AngularJS中模擬相同的beforesend塊,並確保在API調用期間cookie傳遞給服務器?

+1

您是否找到解決此問題的方法? –

回答

0

您是否嘗試將您的標頭參數不是傳遞給json對象,而是直接傳遞給標頭屬性?

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

希望它能提供幫助。

相關問題