2013-08-11 8 views
44

Sto usando angular 1.1.5 e sto usando una risorsa $ per fare un XHR a un servizio REST ma sembra che la risorsa $ non stia aggiungendo intestazione come X-Requested-With as XMLHttpRequest, è un comportamento normale? e Devo aggiungere l'intestazione manualmente?

function loginCtrl($scope,$resource) { 
    $scope.submit = function() { 
     var resource = $resource('/Api/User/login', {}, 
       { 
        authenticate: { 
         method: 'POST', 
         isArray: false, 
         headers: { 
          '__RequestVerificationToken': $scope.loginRequest.Token 

         } 
        } 
       }); 
     resource.authenticate($scope.loginRequest); 
    }; 
} 
+0

$ non supporta le intestazioni. potrebbe essere necessario passare all'uso di $ http – zsong

+0

, penso dalla versione 1.1.3 –

+3

Penso che sia ancora necessario impostarlo in $ http, qualcosa come $ http.defaults.headers.common ['X-Requested-With '] =' XMLHttpRequest ' – zsong

risposta

101

Basta aggiungere questo alla vostra applicazione

myAppModule.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 
}]); 
+2

Laravel 5.1 si aspetta che questa intestazione determini una richiesta come "richiesta Ajax". –

+0

fantastico, ora, come lo facciamo in Angular2? – Ayyash

+0

Ho cercato per quasi una settimana, e proprio quando ho commentato, ho trovato la risposta:/https://angular.io/docs/ts/latest/api/http/BaseRequestOptions-class.html – Ayyash

25

È stato utilizzato ma è stato modificato. (see here)

"X-richiesta-Con intestazione è raramente utilizzato nella pratica e utilizzando tutto il tempo che stiamo innescando il preflight per crossdomain richieste."

Dalla risposta di Thomas Pons here.

+3

è bello sapere, lo sto usando perché sto convalidando la richiesta con un attributo antiForgeryToken in servicestack, il fatto è che io convalidare di essere una richiesta Ajax per sapere che almeno quella richiesta è stata fatta da un modulo, ora la domanda è: "come posso sapere sul lato server se quella richiesta è ajax?", grazie per la risposta! –

+0

Ti darei un +1 per il riferimento aggiuntivo al commit effettivo. –

1

ho avuto lo stesso problema e ho risolto utilizzando:

myApp.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 
}]); 

inoltre è possibile impostare l'intestazione di accettare application/json:

$http({ 
    method: 'GET', 
    url: '/someUrl', 
    headers: { Accept: 'application/json' } 
}) 
La risorsa $
Problemi correlati