1

我在使用我的网络服务时遇到了一个奇怪的问题:

当我作为客户端将表单发布到 REST Web 服务而不设置任何“类型内容”标头时,一切正常。我在服务器上接到电话,并且 Json 文本可用。

如果我作为客户端将我的发布请求的内容类型标头设置为“application/json”,则服务器会回复“错误请求 (400)”。

网络服务方法是:

 <WebInvoke(UriTemplate:="Login", Method:="POST")>
 Public Function LoginFormAccess(data As IO.Stream) As String
 (...)
 end function

如果我不提及“Application/Json”,我可以检索客户端 json 类型的正文,并发布在数据流中。如果我这样做,我会得到错误的请求答案。

为什么关于内容类型值的行为存在如此大的差异,以及提供这种差异的原因是什么?该方法是否需要其他类型的参数,或者必须更改或检查其他内容?

添加:如果内容类型是“应用程序/Json”并且正文为空,那么它可以工作......!

  • 注 1:负责接听电话的类实例化。(new() 中的痕迹证明了这一点)。所以,问题似乎是服务器没有找到合适的方法来调用该对象......

  • 注意 2:我在使用不同的客户端时遇到了这个问题,所以我很确定是服务器端的问题。

  • 注 3:我使用 WCF REST 服务应用程序模板来创建我的项目。

  • 注 4:提及“ResponseFormat=WebMessageFormat.Json”和“RequestFormat=WebMessageFormat.Json”没有帮助。

4

1 回答 1

1

当您向请求content-type添加标头时,您指定的是请求中数据的内容类型,而不是您希望看到返回的内容。

根据您发布的内容,我敢打赌,您正在将 XML 发布到服务中,并且当您设置content-type为 JSON 时,您正在破坏服务器解析正文的能力。您关于它有效的模棱两可的声明“如果内容类型是“应用程序/Json”并且正文为空”可能会证明这一点(假设您的意思是您的请求正文,而不是响应正文)。

您可以通过添加 XML 而不是 JSON 的内容类型来证明这一点 - 如果它与您的请求的实际正文匹配,它将正常工作。

简而言之:它给出了“错误请求”错误,因为您的请求指定了 JSON 内容并且您没有发送 JSON。

于 2012-08-02T15:01:03.710 回答