Ich versuche, eine POST-Anfrage an einen einfachen WCF-Dienst zu senden, den ich geschrieben habe, aber ich bekomme immer eine 400 Bad Request. Ich versuche, JSON-Daten an den Dienst zu senden. Kann jemand sehen, was ich falsch mache? :-)Warum gibt mein C# -Client, der an meinen WCF-REST-Dienst sendet, (400) eine ungültige Anforderung zurück?
Das ist meine Service-Schnittstelle:
public interface Itestservice
{
[OperationContract]
[WebInvoke(
Method = "POST",
UriTemplate = "/create",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
String Create(TestData testData);
}
Die Umsetzung:
public class testservice: Itestservice
{
public String Create(TestData testData)
{
return "Hello, your test data is " + testData.SomeData;
}
}
Die Datacontract:
[DataContract]
public class TestData
{
[DataMember]
public String SomeData { get; set; }
}
Und mein Client-Code schließlich:
private static void TestCreatePost()
{
Console.WriteLine("testservice.svc/create POST:");
Console.WriteLine("-----------------------");
Uri address = new Uri("http://localhost:" + PORT + "/testweb/testservice.svc/create");
// Create the web request
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
// Set type to POST
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
//request.ContentType = "text/x-json";
// Create the data we want to send
string data = "{\"SomeData\":\"someTestData\"}";
// Create a byte array of the data we want to send
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data);
// Set the content length in the request headers
request.ContentLength = byteData.Length;
// Write data
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
// Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Console application output
Console.WriteLine(reader.ReadToEnd());
}
Console.WriteLine();
Console.WriteLine();
}
Kann jemand darüber nachdenken, was ich falsch machen könnte? Wie Sie im C# -Client sehen können, habe ich sowohl application/x-www-form-urlencoded als auch text/x-json für ContentType ausprobiert, weil ich dachte, dass das etwas damit zu tun haben könnte, aber anscheinend nicht. Ich habe versucht, eine GET-Version des gleichen Dienstes und es funktioniert gut und gibt eine JSON-Version von TestData ohne Probleme zurück. Aber für POST, na ja, ich bin ziemlich im Moment auf diesem :-(stecken
können Sie http-Protokolle (Client und/oder Server) liefern? – defeated