Angularjs $http.post() appel à l'api de jeter 405 erreur sur la pré-OPTIONS de vol d'appel
Je suis en train de faire un POST à une api, mais je suis un 'NetworkError De 405 method not Allowed" sur ce que je viens d'apprendre, c'est un pré-OPTIONS de vol de l'appeler pour le service. Des recherches sur la question revient avec des réponses qui ne sont pas tout à fait ce que je cherche. J'ai eu un premier problème avec la SCRO, à laquelle j'ai ajouté ce qui suit à mon service web(Web API):
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
J'ai mon client HTML/angulaire code organisé comme suit:
HTML:
<div class="row">
<div class="col-lg-6 col-xs-12">
<div class="form-group">
<label>First Name*</label>
<input type="text" id="txtFirstName" ng-model="firstName" class="form-control" required/>
</div>
</div>
<div class="col-lg-6 col-xs-12">
<div class="form-group">
<label>Last Name*</label>
<input type="text" id="txtLastName" ng-model="lastName" class="form-control" required/>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-xs-12">
<div class="form-group">
<label>Company Name*</label>
<input type="text" id="txtCompanyName" ng-model="companyName" class="form-control"
required/>
</div>
</div>
<div class="col-lg-6 col-xs-12">
<div class="form-group">
<label>Your Work Email*</label>
<input type="email" id="txtEmail" ng-model="email" class="form-control" required/>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-xs-12">
<div class="form-group">
<label>Office Phone Number*</label>
<input type="text" id="txtPhone" ng-model="phone" class="form-control" required/>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-xs-12">
<div class="form-group">
<input type="submit" id="btnDemoSubmit" class="btn btn-default form-control" style="background-color: #053A54; color: #ffffff;" value="Submit For Trial" ng-click="demoInquiry()"/>
</div>
</div>
</div>
Contrôleur:
(function () {
var app = angular.module("app", [])
app.controller('MainController', function($scope, $http) {
var onUpdatesComplete = function (response) {
$scope.updates = response.data;
};
$http.get("http://localhost:XXXXX/XXX/XXXXXX/XXXXXXXXXX")
.then(onUpdatesComplete);
$scope.demoInquiry = function(){
var data = {
firstName : $scope.firstName,
lastName : $scope.lastName,
companyName : $scope.companyName,
email : $scope.email,
phone : $scope.phone
};
console.log(data);
$http.post("http://localhost:XXXXX/XXX/XXXXXX/XXXXXXXXXX", data).success(function() {
$scope.postSuccess = true
}).error(function(){
$scope.postError = true;
});
};
});
}());
J'ai vérifié que le service fonctionne correctement avec un violon, donc je ne suis pas sûr de la façon d'aborder la question à partir d'ici. Toute aide serait appréciée.
- Est cette réponse utile à vous de toute façon? stackoverflow.com/questions/17498691/...
Vous devez vous connecter pour publier un commentaire.
Il semble que votre serveur peut s'attendre à un "application/x-www-form-urlencoded" des données, alors que ce que vous êtes en train de faire est d'envoyer une chaîne JSON dans le corps POST. Ce que vous devrez probablement faire (en supposant que vous ne voulez pas juste avoir votre API poignée JSON) est deux choses:
Le problème est tout simplement que le $service http ne fonctionne pas de la même manière que vous pourrait s'attendre à ce qu'ils font avec des appels AJAX. Vous pouvez trouver plus d'informations sur ce si vous, de faire des recherches pour les variations de "angularjs $http post de formulaire".
Enfin, ici est une solution intéressante au problème, ou, il y a d'autres bibliothèques qui font que certaines de ces choses plus faciles, comme Restangular.
Utiliser $http.jsonp(url) pour les requêtes api.