47

I'm using angular 1.1.5 and I'm using a $resource to make a XHR to a REST service but it seems like the the $resource isn't appending the header as X-Requested-With as XMLHttpRequest, is that a normal behavior? and Do I need to append the header manually?

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);
    };
}
pedrommuller
  • 15,741
  • 10
  • 76
  • 126

3 Answers3

109

Just add this to your app

myAppModule.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
}]);
Daniel Darabos
  • 26,991
  • 10
  • 102
  • 114
Johnny
  • 1,116
  • 1
  • 8
  • 3
26

It used to but was changed. (see here)

"X-Requested-With header is rarely used in practice and by using it all the time we are triggering preflight checks for crossdomain requests."

From Thomas Pons' answer here.

Community
  • 1
  • 1
Breandán
  • 1,855
  • 22
  • 34
  • 3
    it's good to know, I'm using it because I'm validating the request with an antiForgeryToken attribute in servicestack, the thing is that I validate to be an ajax request to know that at least that request was made from a form, now the question is: "how can I know in the server side if that request is ajax?", thanks for the answer! – pedrommuller Sep 25 '13 at 13:28
  • I'd give you a +1 for the additional reference to the actual commit. – kumarharsh Feb 16 '15 at 11:42
2

I had the same issue and I solved it using:

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

Also you can set the header to accept application/json:

$http({
  method: 'GET',
  url: '/someUrl',
  headers: { Accept: 'application/json' }
})
Mustafa Dwaikat
  • 3,392
  • 9
  • 27
  • 41