【问题标题】:Can't Pass JSON Post Data to WCF REST Service using Fiddler无法使用 Fiddler 将 JSON 发布数据传递到 WCF REST 服务
【发布时间】:2012-05-04 15:14:39
【问题描述】:

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

我做错了什么?

谢谢。

【问题讨论】:

    标签: wcf fiddler wcf-rest


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      [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"
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 是的,我肯定需要 POST,并且我在 Fiddler 中将其设置为 POST。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 2011-02-27
        • 2012-01-07
        相关资源
        最近更新 更多