为什么我的C#客户端发送到我的WCF REST服务,返回(400)错误的请求?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (115)

我试图发送POST请求到我写的一个简单的WCF服务,但我一直收到400错误请求。我试图将JSON数据发送到服务。任何人都可以发现我做错了什么吗?

这是我的服务界面:

public interface Itestservice
{
    [OperationContract]
    [WebInvoke(
        Method = "POST",
        UriTemplate = "/create",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
    String Create(TestData testData);
}

实施:

public class testservice: Itestservice
{
    public String Create(TestData testData)
    {
        return "Hello, your test data is " + testData.SomeData;
    }
}

DataContract:

[DataContract]
public class TestData
{
    [DataMember]
    public String SomeData { get; set; }
}

最后是我的客户代码:

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();
}

任何人都可以想到我可能会做错什么?正如你可以在C#客户端中看到的,我已经尝试了ContentType的application / x-www-form-urlencoded和text / x-json,认为这可能与它有关,但它似乎并没有。我试过了这个相同的服务的GET版本,它工作正常,并返回一个JSON版本的TestData没有问题。但是对于POST,好吧,我现在很困扰这个问题

提问于
用户回答回答于

你尝试过“application / json”而不是“text / x-json”吗?application / json是唯一有效的json媒体类型。

用户回答回答于

这里唯一的问题是ContentType。

尝试(推荐)

request.ContentType = "application/json; charset=utf-8";

或者(这也会起作用)

request.ContentType = "text/json; charset=utf-8";

以上两个都解决了这个问题。不过,建议第一个,关于JSON-RPC 1.1规范的详细信息,请查阅http://json-rpc.org

扫码关注云+社区