2015-02-26 2 views
3

Im, отправляющий сообщение AJAX в .NET-приложение, но я продолжаю получать 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: применение/х-WWW-форм-urlencoded, кодировка = UTF-8 X-Requested-With: XMLHttpRequest

Форма данных показывает вверх, как он должен, насколько я могу сказать, но ответ всегда, что POST isAjaxRequest является ложным. И никакие данные не успешны POST. Что я здесь делаю неправильно?

+0

Возможный дубликат [Убедитесь, что стороны AngularJS $ ресурс запроса сервера в .NET MVC] (http://stackoverflow.com/questions/19001242/check-that -angularjs-resource-request-server-side-in-net-mvc) – RMalke

ответ

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

+0

Заголовки уже установлены на стороне сервера. К сожалению, я все еще получаю тот же ответ. В любом случае, спасибо. – jessback

Смежные вопросы