4

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 エラーが発生します。Authorization ブロックをサーバー コードから削除すると、コードはヘッダーを挿入しなくても機能します。AngularJS で同じ beforesend ブロックをエミュレートし、API 呼び出し中に Cookie がサーバーに渡されるようにするにはどうすればよいですか?

4

1 に答える 1

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) {
// ...
});

それが役立つことを願っています。

于 2013-05-27T08:48:50.600 に答える