【问题标题】:Why Setting POST Content-type:"Application/Json" causes a "Bad Request" on REST WebService?为什么设置 POST Content-type:"Application/Json" 会导致 REST WebService 出现“错误请求”?
【发布时间】:2012-07-30 15:27:47
【问题描述】:

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

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

如果我作为客户端将我的 post 请求的 content-type 标头设置为“application/json”,则服务器会回复“Bad Request (400)”。

网络服务方法是:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 尝试将ResponseFormat=WebMessageFormat.Json添加到WebInvoke
  • 我试过了。但没有成功。我添加了一个“requestFormat:=WebMessageFormat.Json”,因为它是 Json 格式的请求。但它不起作用......
  • 如果我将内容类型设置为“text/javascript”,它就可以工作。 “Application/Json”有什么不同???

标签: vb.net json web-services rest


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2011-08-11
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多