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"}

WFC Rest 服务 PUT with json -- 接收的对象始终为空

我认为JSON格式不正确。试试这个:

  1. 运营合同中的BodyStyle更改为BodyStyle = WebMessageBodyStyle.Bare

  2. 在提出请求时尝试添加以下内容:

    Content-Type: application/json;charset=utf-8

  3. 如果仍然不起作用,请尝试在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

希望这会有所帮助!谢谢