无法使用强类型参数POST到WCF Rest Service

时间:2011-05-03 16:39:18

标签: wcf rest

我有一个库存WCF Rest应用程序(默认Web.config,Web Routing)。我无法让WCF框架自动将请求流反序列化为类型化对象。我有一个方法sig的服务形式...

[WebInvoke(Method = "POST", 
            UriTemplate = "", 
            BodyStyle = WebMessageBodyStyle.WrappedRequest, 
            ResponseFormat = WebMessageFormat.Json)]
MethodA(FirstParam first, SecondParam second)

如果我使用$ .ajax从fiddler或jQuery发起请求,我会收到400 Bad Request错误。我已经做了大量的搜索,发现更改方法sig以使用System.IO.Stream允许执行该方法,但是它也增加了对对象进行反序列化的开销。

原始请求正文如下

{
    "first":"{\"p1\":\"p1 value\",\"p2\":\"p2 value\",\"p3\":100\"p4\":null}",
    "second":"{\"p1\":\"p1 value\"}"
}

是的,除非方法有Stream或没有参数,否则应用程序甚至不会进入服务本身。此服务中只有1个post方法,另一个是正常工作的GET方法。

我已使用http://www.codeproject.com/KB/ajax/jQueryWCFRest.aspx作为参考实现,但无法让它在此解决方案上运行。

这里有什么我想念的东西,希望其他人可以看到吗?

莱昂

1 个答案:

答案 0 :(得分:0)

Bleh ......问题原来是请求序列化值的方式!

{
    "first":"{\"p1\":\"p1 value\",\"p2\":\"p2 value\",\"p3\":100\"p4\":null}",
    "second":"{\"p1\":\"p1 value\"}"
}

应该没有转义报价....

{
    "first":"{"p1":"p1 value","p2":"p2 value","p3":100"p4":null}",
    "second":"{"p1":"p1 value"}"
}

发生这种情况的原因是JSON.stringify不仅在包装的请求参数上被调用,而且在每个参数上也被调用。