0

我正在做一个需要通过客户端接收复杂数据的 WCF REST 服务。我知道我不能通过 GET 方法传递复杂的数据,所以我使用 POST 来发送它。

我有这样的方法定义......

[WebInvoke (UriTemplate="/test/item", Method="POST", 
        RequestFormat=WebMessageFormat.Json, 
        ResponseFormat=WebMessageFormat.Json, 
        BodyStyle=WebMessageBodyStyle.Wrapped)]
    [OperationContract]
    string TestMethod(InItem item);

我正在尝试使用 .Net 控制台客户端进行这样的消费......

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://myIP:port/test/item");
request.Credentials = CredentialCache.DefaultCredentials;
request.Method = "POST";

InItem item = new InItem()
{
    Quantity = 2,
    BougthQuantity = 2,
    Code = "9998",
    Date = DataTime.Now
};

string itemToSend = JsonConvert.SerializeObject(item);
byte[] byteData = Encoding.UTF8.GetBytes(itemToSend);
request.ContentLength = byteData.Length;
request.ContentType = "application/json;";

Stream stream = request.GetRequestStream();
stream.Write(byteData, 0, byteData.Length);
stream.Close();

WebResponse response = request.GetResponse();
stream = response.GetResponseStream();

但是当我调用服务方法时,TestMethod 上的 'item' 参数始终为空,我是否遗漏了什么或者我做错了什么?

提前致谢...

4

1 回答 1

0

谢谢大家的回答,我才意识到错误是什么,首先......或者当然我们可以使用声明

"{\"item\":"+serialized object + "}"

但这有点乱,我们可以将 BodyStyle 更改为 Bare。

接下来,我使用的是同一个库,因为实体通过项目共享,并且我将 ContractSerializer 应用于实体......

错误是关于“DateTime”参数的序列化,因为 jsonSerializer 使用 Newtonsoft 序列化程序和 DataContractJsonSerializer 使用这种格式

日期=2013-01-21T14:29:41.2211548-06:00(在提琴手上显示)

所以,我只是更改字符串的日期时间,它工作正常......

于 2013-01-21T22:28:47.277 回答