IsAjaxRequest在AngularJs $ http.post上使用正确的标头返回false

时间:2015-02-26 18:58:23

标签: .net angularjs

我向.NET应用程序发送一个AJAX帖子但是我继续让IsAjaxRequest返回false,尽管为Content-Type和X-Requested-With添加了适当的内容标题。

配置设置正确的标头和序列化,然后底部的控制器处理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) {
      });
    }
  };
});

如您所见,请求标头已按预期读取。以下内容已被添加。

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

表单数据显示为我应该告诉它,但响应始终是POST isAjaxRequest为false。没有数据成功POST。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

我不是.NET的人但是你在服务器上设置了标题吗? 像这样:

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

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