3

我正在尝试调用 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 的值始终为空,而不是“数据”。

我究竟做错了什么?

谢谢。

4

3 回答 3

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"
于 2012-04-24T03:11:16.280 回答
1

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

于 2012-04-24T02:39:49.470 回答
0

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

于 2012-06-29T13:26:37.917 回答