WFC Rest 服务 PUT with json -- 接收的对象始终为空
本文关键字:对象 服务 Rest PUT with json WFC | 更新日期: 2023-09-27 17:56:47
我有一个简单的基于Windows Serviced的WCF REST客户端(基于WebServiceHost())。 我可以从 GET 操作接收数据,并且可以在 PUT 操作上调用正确的方法,但是传递的 json 没有反序列化为 .NET 对象。 对于将传递到我的对象中的对象,我总是得到 null。
接收方法采用两个参数,一个是来自 uri 的键,第二个是接收的 json 数据。 密钥正确进入我的方法。
我已打开日志记录,但没有任何反序列化错误。 小提琴手很高兴,它收到了200的回复。 我没有看到任何有趣的东西在看电线上发生的事情。
我一直在查看围绕此问题的其他帖子,从我所看到的情况来看,我已经正确设置了内容。 显然这不是真的,但我看不出缺少/错误的地方。 如果只是稍微多一点诊断消息出来,这将容易得多。我将配置文件调试设置为详细,但我在实际的消息反序列化过程中没有看到太多。
有没有办法利用实际的反序列化过程来进一步调试?
或者下面详述的我的设置有问题吗?
服务协定, Send()
方法具有两个参数,一个key
和一个message
对象:
[ServiceContract]
public interface ILoader
{
[OperationContract]
[WebInvoke(Method = "PUT", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "Send/{key}")]
string Send(string key, MessageBodyWrapper message);
}
我有消息包装器对象的数据协定设置:
[DataContract(Name = "MessageWrapper")]
public class MessageBodyWrapper
{
private string _messageBody;
private string _state;
public MessageBodyWrapper()
{
_messageBody = "un-initialized";
}
[DataMember(Name="Message")]
public string Message
{
get { return _messageBody; }
set { _messageBody = value; }
}
public override string ToString()
{
JavaScriptSerializer js = new JavaScriptSerializer(); // Available in System.Web.Script.Serialization;
return js.Serialize(this);
}
}
界面
public class Loader : ILoader
{
private string _state;
public Loader()
{
_state = "initialzied";
}
public string Send(string key, MessageBodyWrapper Message)
{
string ret = "Send here -- Message";
return (ret);
}
}
我正在使用小提琴手发送样品 PUT
User-Agent: Fiddler
Content-Type: application/json
Host: localhost:8080
Content-Length: 48
{"Message":"sdsdfsdf"}
我认为JSON格式不正确。试试这个:
-
将运营合同中的
BodyStyle
更改为BodyStyle = WebMessageBodyStyle.Bare
-
在提出请求时尝试添加以下内容:
Content-Type: application/json;charset=utf-8
-
如果仍然不起作用,请尝试在
MessageBodyWrapper
类中重写ToString()
方法。public override string ToString() { JavaScriptSerializer js = new JavaScriptSerializer(); // Available in System.Web.Script.Serialization; return js.Serialize(this); }
现在创建一个MessageBodyWrapper
对象并调用ToString()
方法,在这里您可以看到所需的 JSON 格式。
MessageBodyWrapper mbw = new MessageBodyWrapper();
string json = mbw.ToString(); // Hit break point here and "json" variable will contain required JSON format.
获取所需的 JSON 格式后,请尝试以该格式发送 JSON。
希望这会有所帮助!谢谢