3

我使用以下发布方法开发了 WCF 服务:

[OperationContract]
[WebInvoke(Method = "POST",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Wrapped,
    UriTemplate = "/InsertBearingData")]
bool InsertBearingData(String JSONString);

我正在使用 Fiddler 为这个方法制定一个 HTTP POST 请求,但是它正在返回Status Code - 400 Bad Request. 这是制定的要求:

请求标头:

Host: localhost:21468
Content-Length: 96
Content-Type: application/json

请求正文:

[{"start time":"29-03-2013 11:20:11.340","direction":"SW","end time":"29-03-2013 11:20:14.770"}]

你能告诉我如何制定一个好的请求以获得成功的响应吗?

4

1 回答 1

3

您的代码中有几个问题:

  • 参数的数据类型是字符串,但你传递的是一个 JSON 数组给它;字符串参数需要传递 JSON 字符串。
  • 操作的主体样式设置为Wrapped,这意味着参数应该被包装在一个对象中,该对象的键是参数名称,例如{"JSONString":<the actual parameter value>}

要接收与您发送的请求类似的请求,您需要进行如下操作:

[ServiceContract]
public interface ITest
{
    [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare,
        UriTemplate = "/InsertBearingData")]
    bool InsertBearingData(MyType[] param);
}

[DataContract]
public class MyType
{
    [DataMember(Name = "start time")]
    public string StartTime { get; set; }
    [DataMember(Name = "end time")]
    public string EndTime { get; set; }
    [DataMember(Name = "direction")]
    public string Direction { get; set; }
}
于 2013-03-29T15:10:41.200 回答