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