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?

1

1 Answer 1

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

Sign up to request clarification or add additional context in comments.

1 Comment

Headers are already set server side. Unfortunately I'm still getting the same response. Thanks anyway though.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.