Angularjs $http.post () - Aufruf an die api werfen 405 Fehler auf pre-flight-call-OPTIONEN
Ich versuche, einen POST zu machen, um eine api, aber ich bin immer ein "NetworkError 405 - Methode Nicht Erlaubt" was habe ich zu lernen, ist ein pre-flight-OPTIONEN-Aufruf an den Dienst. Die Erforschung der Frage kommt, mit Antworten, die nicht ganz das was ich Suche. Ich hatte eine anfängliche problem mit CORS, zu denen ich noch folgende auf meiner web-Dienst(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>
Ich habe meinen client HTML/angular code wie folgt organisiert:
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>
Controller:
(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;
});
};
});
}());
Ich habe überprüft, dass der Dienst ordnungsgemäß funktioniert mit Fiddler', so bin ich nicht sicher, wie Sie Sie zur Bekämpfung der Problem von hier. Jede Hilfe würde geschätzt werden.
- Ist diese Antwort hilfreich für Sie in überhaupt? stackoverflow.com/questions/17498691/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie dein server kann erwartet werden, "application/x-www-form-urlencoded" - Daten, während das, was Sie tatsächlich tun, ist senden Sie einen JSON-string in die POST Körper. Was müssen Sie wahrscheinlich zu tun (vorausgesetzt, Sie wollen nicht nur Ihre API Griff JSON) sind zwei Dinge:
Das Problem ist einfach, dass der $http-service nicht tatsächlich arbeiten in der gleichen Weise, dass man erwarten könnte, dass Sie mit AJAX-calls. Sie können finden Sie mehr über diese, wenn Sie nicht sucht nach Variationen von "angularjs $http form post".
Schließlich hier ist eine interessante Lösung für das problem, oder gibt es andere Bibliotheken, die einige dieser Dinge zu erleichtern, wie Restangular.
Verwenden $http.jsonp(url) für den api-Abfragen.