2014-05-16 13 views
23

Per l'invio di token OAuth2 sto installando default intestazione AngularJS come questo:Set default colpo di testa AngularJS ma non lo usano su una specifica richiesta

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

Questa grande opera, ma non hanno bisogno di questo intestazione (ricevo un errore) per una richiesta specifica.

C'è un modo per escludere l'intestazione di default quando si esegue quella richiesta?

Grazie!

risolto

Grazie a Riron per me salire su una strada giusta. Ecco la risposta:

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

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

     delete headers['Authorization']; 

     return headers; 
    } 
}); 

risposta

17

Quando si effettua la chiamata con $ http, è possibile ignorare le impostazioni predefinite intestazioni, fornendo loro direttamente nella vostra richiesta di configurazione:

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

altrimenti si potrebbe trasformare la vostra richiesta utilizzando il transformRequest parametro, ancora nella configurazione $ http. Si veda il documento:

transformRequest - {function(data,headersGetter)|Array.<function(data, headersGetter)>} - trasformare funzione o un array di tali funzioni. La funzione di trasformazione prende il corpo della richiesta HTTP e le intestazioni e restituisce la versione trasformata di (in genere serializzata).

questo modo si potrebbe eliminare un'intestazione per una singola richiesta prima che sia essendo inviare:

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

Quindi, se ho impostato come default intestazione (non come transformRequest, ma il modo in cui ho fatto in il mio post di domanda), non posso davvero disinserirlo per una richiesta? – Julius

+0

Se si desidera disinserirlo, sarà necessario utilizzare il parametro 'transformRequest' per la richiesta specifica e modificare le intestazioni tramite una funzione personalizzata. – Riron

+0

Attenzione - https://github.com/angular/angular.js/commit/5da1256fc2812d5b28fb0af0de81256054856369 A causa di 5da1256, le funzioni transformRequest non possono più modificare le intestazioni delle richieste. –

6

Per i ritardatari, mentre la soluzione avrebbe potuto funzionare - in realtà non dovrebbe essere necessario utilizzare transformRequest per questo .

La documentazione angolari per il servizio di $ http realtà hanno questa situazione esatta coperto:

Per rimuovere in modo esplicito un colpo di testa aggiunto automaticamente tramite $ httpProvider.defaults.headers su una base per ogni richiesta, utilizzare le intestazioni proprietà, impostando l'intestazione desiderata su indefinito. Per esempio:

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

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

Angular 1.4.0 non possono più modificare le intestazioni di richiesta utilizzando transformRequest:

Se si ha la necessità di aggiungere in modo dinamico/rimuovere le intestazioni che esso dovrebbe essere fatto in una funzione di intestazione, per esempio :

$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 
    } 
    } 
}) 
0

Mentre il $httpProvider possono ignorare $http l'uso di intereceptors sono 1 modo di gestire questo, finiscono per farlo in questo modo

function getMyStuff(blah) { 

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


} 
Problemi correlati