3

Im sending an AJAX post to a .NET Application but I continue to get IsAjaxRequest returns false despite adding proper content headers for Content-Type and X-Requested-With.

The config sets up the proper headers and serialization and then the controller at the bottom handles the POST.

// Configure httpProvider
validationApp.config(['$httpProvider', function($httpProvider) {
  // .NET AJAX FIX
  $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';

  // Use x-www-form-urlencoded Content-Type
  $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

  /**
   * The workhorse; converts an object to x-www-form-urlencoded serialization.
   * @param {Object} obj
   * @return {String}
   */
  var param = function(obj) {
    var query = '', name, value, fullSubName, subName, subValue, innerObj, i;

    for(name in obj) {
      value = obj[name];

      if(value instanceof Array) {
        for(i=0; i<value.length; ++i) {
          subValue = value[i];
          fullSubName = name + '[' + i + ']';
          innerObj = {};
          innerObj[fullSubName] = subValue;
          query += param(innerObj) + '&';
        }
      }
      else if(value instanceof Object) {
        for(subName in value) {
          subValue = value[subName];
          fullSubName = name + '[' + subName + ']';
          innerObj = {};
          innerObj[fullSubName] = subValue;
          query += param(innerObj) + '&';
        }
      }
      else if(value !== undefined && value !== null)
        query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
    }

    return query.length ? query.substr(0, query.length - 1) : query;
  };

  // Override $http service's default transformRequest
  $httpProvider.defaults.transformRequest = [function(data) {
    return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
  }];

}]);

// POST
validationApp.controller('validationController', function($scope, $http) {
  $scope.user = {};

  $scope.update = function(user) {
    if ($scope.uForm.$valid) {
      $http.post('//ASPNET/EndPoint', $scope.user)
      .success(function(response) {
      })
      .error(function(response) {
      });
    }
  };
});

As you can see, the request headers already read as they should. And the below have been added.

Content-Type: application/x-www-form-urlencoded;charset=UTF-8 X-Requested-With: XMLHttpRequest

Form data shows up like it should as far as I can tell but the response is always that the POST isAjaxRequest is false. And no data is successfully POST. What am I doing wrong here?

jessback
  • 123
  • 3
  • 10
  • Possible duplicate of [Check that AngularJS $resource Request Server Side in .NET MVC](http://stackoverflow.com/questions/19001242/check-that-angularjs-resource-request-server-side-in-net-mvc) – RMalke Dec 21 '15 at 15:39

1 Answers1

0

I am not a .NET guy but did you set the headers on the Server? Like this:

 [EnableCors(origins: "http://www.contoso.com,http://www.example.com", 
headers: "*", methods: "*")] 

See: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#allowed-origins

HknLof
  • 111
  • 2
  • 12
  • Headers are already set server side. Unfortunately I'm still getting the same response. Thanks anyway though. – jessback Feb 26 '15 at 19:58