jQuery Ajax JSONP-Post Aufruf von WCF-Dienst meist bekommt 400 Bad Request
Hmm naja es gibt viele hier, aber ich kann nicht scheinen, um ein JSON-Objekt, über einen web-service-Objekt. Der nächste, den ich bekommen kann zu dieser Arbeit ist in diesem Beispiel, in dem die ID entspricht der string-Variablen-Namen in den Dienst wie folgt
var jsonData = { "ID": "hello" };
$.ajax({
url: "http://blah/blah.svc/GetPersonByID",
type: "POST",
dataType: "jsonp", //from the server
contentType: "application/json; charset=utf-8", //to the server
data: jsonData,
success: function (msg) {
alert("success " + msg.Name);
},
error: function (xhr, status, error) {
alert(xhr.status + " " + status + " " + error);
}
});
Wo der WCF-Dienst ist dies
[OperationContract]
[Description("Returns a person by ID.")]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
Person GetPersonByID(string ID);
public Person GetPersonByID(string ID) {
Person person = new Person {
Name = ID, //"Bob",
FavoriteColor = "Red",
UserID = 1 //int.Parse(ID)
};
return person;
}
Zurück "Erfolg-ID=hello".
Warum funktioniert es return-ID=Hallo, anstatt nur Hallo?
Wenn ich die data: JSON.stringify({ "ID": "Hallo" }) schlägt er mit 400 bad request
Wenn ich Versuch mit einem anderen Datentyp wie int für die web-service-ID (anstelle von string -) wenn nicht.
Wenn ich versuchen, eine komplexere Datentypen es scheitert.
Irgendwelche Gedanken??? Thx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig die Körper-Stil erwartet, die von einem WCF-Betrieb ist "bare", das bedeutet, dass der Eingang gesendet werden müssen durch sich selbst (d.h., es erwartet, dass so etwas wie
"hello"
. In deinem Fall bist du Verpackung es in einem Objekt mit dem parameter-Namen ({"ID":"hello"}
).Können Sie entweder die operation, die erwarten, dass die eingewickelt Eingang (durch Einstellung der
BodyStyle
Eigenschaft desWebInvoke
AttributWebMessageBodyStyle.WrappedRequest
(und JSON.stringify Ihre Daten), oder ändern Sie die parameter übergeben $.ajax, senden Sie einfach die JSON-string (data: "\"hello\""
).