我有一个库存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作为参考实现,但无法让它在此解决方案上运行。
这里有什么我想念的东西,希望其他人可以看到吗?
莱昂
答案 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不仅在包装的请求参数上被调用,而且在每个参数上也被调用。