web-dev-qa-db-ja.com

AngularJSにデフォルトのヘッダーを設定しますが、特定の1つのリクエストでは使用しません

OAuth2トークンを送信するために、AngularJSのデフォルトヘッダーを次のように設定しています。

$http.defaults.headers.common['Authorization'] = 'Bearer ' + access_token;

これはうまく機能しますが、特定のリクエストに対してこのヘッダーは必要ありません(エラーが発生します)。

そのリクエストを実行するときにデフォルトヘッダーを除外する方法はありますか?

ありがとう!

解決した

Riron に感謝します。ここに答えがあります:

$http({
    method: 'GET',
    url: 'http://.../',

    transformRequest: function(data, headersGetter) {
        var headers = headersGetter();

        delete headers['Authorization'];

        return headers;
    }
});
25
Julius

$ httpを使用して呼び出しを行う場合、デフォルトのヘッダーをリクエスト構成に直接指定することで、それらをオーバーライドできます。

_$http({method: 'GET', url: '/someUrl', headers: {'Authorization' : 'NewValue'} }).success();
_

それ以外の場合は、transformRequestパラメーターを使用して、まだ$ http構成でリクエストを変換できます。ドキュメントを参照してください:

transformRequest – {function(data,headersGetter)|Array.<function(data, headersGetter)>} –変換関数またはそのような関数の配列。変換関数は、httpリクエストの本文とヘッダーを受け取り、変換された(通常はシリアル化された)バージョンを返します。

このようにして、1つの要求のヘッダーを送信前に削除できます。

_$http({method: 'GET', 
       url: '/someUrl', 
       transformRequest: function(data,headersGetter){ //Headers change here } 
}).success();
_
19
Riron

後発者の場合、解決策は機能している可能性がありますが、実際には、transformRequestを使用する必要はありません。

$ httpサービスのAngular docsは、実際にこの正確な状況をカバーしています:

$ httpProvider.defaults.headersを介してリクエストごとに自動的に追加されたヘッダーを明示的に削除するには、headersプロパティを使用して、目的のヘッダーをndefinedに設定します。例えば:

 var req = {  
      method: 'POST',  
      url: 'http://example.com',  
      headers: {  
           'Content-Type': undefined  
      },  
      data: { 
           test: 'test' 
      } 
 }

 $http(req).success(function(){...}).error(function(){...});
8
Alkie

Angular 1.4.transformRequestを使用してリクエストヘッダーを変更できなくなりました。

ヘッダーを動的に追加/削除する必要がある場合は、ヘッダー関数で実行する必要があります。次に例を示します。

$http.get(url, {
  headers: {
    'X-MY_HEADER': function(config) {
      return 'abcd'; //you've got access to a request config object to specify header value dynamically
    }
  }
})
6
Brent Washburne

$httpProvider$httpをオーバーライドできますが、intereceptorsの使用はこれを処理する1つの方法ですが、私はこのようにしてしまいます

function getMyStuff(blah) {

        var req = {
            method: 'GET',
            url: 'http://...',
            headers: {
                'Authorization': undefined
            }
        }
        return $http(req)
            .then(function(response) {
                return response.data;
            });


}
0
Tom Stickel