【问题标题】:Passing complex data to REST WCF POST method将复杂数据传递给 REST WCF POST 方法
【发布时间】:2013-01-21 19:42:42
【问题描述】:

我正在做一个需要通过客户端接收复杂数据的 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' 参数始终为空,是我遗漏了什么还是我做错了什么?

提前谢谢...

【问题讨论】:

  • 可能是因为当您将其序列化为 JSON 然后将其粘贴到您的请求流中时,您实际上并没有传递一个项目,只是一个匿名 JSON 对象。尝试包装它: itemToSend="{item: "+JsonConvert.SerializeObject(item)+"}";不过我可能完全错了:()
  • 它们是否都使用相同版本的 InItem 库?
  • InItem 是否也标有 Serializable 属性?
  • @RyanBennett 唯一需要Serializable 的序列化程序是BinaryFormatter。没必要。

标签: c# wcf rest


【解决方案1】:

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

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

但是有点乱,我们可以把 BodyStyle 改成 Bare。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2011-01-04
    • 2011-07-10
    相关资源
    最近更新 更多