无法使用Fiddler将JSON发布数据传递给WCF REST服务

时间:2012-04-24 00:31:49

标签: wcf fiddler wcf-rest

我正在尝试调用WCF休息服务,如下所示:

[WebInvoke(UriTemplate = "Login", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public string Process(string AuthenticationInfo)
{

我正在尝试使用以下Fiddler 2中的以下内容调用它:

User-Agent: Fiddler
Host: localhost
content-type: application/json;charset=utf-8
content-length: 0
data: {"AuthenticationInfo": "data"}

我在方法中有一个断点,它确实命中了断点,但AuthenticationInfo的值始终为null,而不是“data”。

我做错了什么?

感谢。

3 个答案:

答案 0 :(得分:3)

[WebInvoke]属性的默认“正文样式”是“Bare”,这意味着输入(在您的情况下,"data")必须“按原样”发送。您发送的是输入的包装版本(即包装在其键为参数名称的对象中。

有两种方法可以完成这项工作:更改WebInvoke声明以包含BodyStyle参数:

[WebInvoke(
    UriTemplate = "Login", 
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public string Process(string AuthenticationInfo)   

或者您可以更改发送参数“bare”的请求:

POST .../Login HTTP/1.1
User-Agent: Fiddler
Host: localhost
Content-Type: application/json;charset=utf-8
Content-Length: 6

"data"

答案 1 :(得分:1)

您是否在Fiddler中将HTTP方法设置为POST?默认情况下,WCF REST操作是POST,如果您想这样做,则需要在Method="GET"属性上设置WebInvoke。顺便说一句,在你的情况下,我不认为GET是有意义的,因为你发送数据,所以只要确保你在Fiddler中使用POST。

答案 2 :(得分:0)

您将Content-Length发送为0,但它应该是POST数据的长度。