我正在尝试调用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”。
我做错了什么?
感谢。
答案 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数据的长度。