webentwicklung-frage-antwort-db.com.de

Setzen Sie den Standard-Header für AngularJS, verwenden Sie ihn jedoch nicht für eine bestimmte Anforderung

Zum Versenden von OAuth2-Token stelle ich den Standard-Header für AngularJS wie folgt ein:

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

Das funktioniert gut, aber ich brauche diesen Header nicht (ich bekomme einen Fehler) für eine bestimmte Anfrage.

Gibt es eine Möglichkeit, den Standard-Header bei der Ausführung dieser Anforderung auszuschließen?

Vielen Dank!

Gelöst

Danke an Riron für den richtigen Weg. Hier ist die Antwort:

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

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

        delete headers['Authorization'];

        return headers;
    }
});
24
Julius

Wenn Sie mit $ http telefonieren, können Sie die Standard-Header überschreiben, indem Sie sie direkt in der Request-Konfiguration angeben:

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

Andernfalls können Sie Ihre Anforderung mithilfe des Parameters transformRequest in Ihrer $ http-Konfiguration umwandeln. Siehe doc:

transformRequest - {function(data,headersGetter)|Array.<function(data, headersGetter)>} - transform - Funktion oder ein Array solcher Funktionen. Die Transformationsfunktion nimmt Den http-Request-Body und die Header an und gibt die transformierte (Normalerweise serialisierte) Version zurück.

Auf diese Weise könnten Sie einen Header für eine einzelne Anforderung löschen, bevor sie gesendet wird:

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

Für Spätankömmlinge, während die Lösung möglicherweise funktioniert hat - Sie sollten transformRequest dafür eigentlich nicht brauchen.

Die Angular -Dokumente für den $ http-Dienst haben genau diese Situation abgedeckt:

Um einen über $ HttpProvider.defaults.headers automatisch hinzugefügten Header explizit zu entfernen, verwenden Sie die Eigenschaft headers Und setzen Sie den gewünschten Header auf undefined . Zum Beispiel:

 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.0 kann Anforderungsheader mit transformRequest nicht mehr ändern:

Wenn Sie Kopfzeilen dynamisch hinzufügen oder entfernen müssen, sollte dies in Einer Header-Funktion erfolgen, zum Beispiel:

$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

Während der $httpProvider$http die Verwendung von intereceptors überschreiben kann, ist dies eine Möglichkeit, dies zu tun

function getMyStuff(blah) {

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


}
0
Tom Stickel