使用我的网络服务时出现了一个奇怪的问题:
当我作为客户端将表单发布到REST Web服务而不设置任何“类型内容”标题时,一切正常。我在服务器上接到调用,Json文本可用。
如果我作为客户端将我的帖子请求的内容类型标题设置为“application / json”,则服务器通过“错误请求(400)”回复。
网络服务方法是:
<WebInvoke(UriTemplate:="Login", Method:="POST")>
Public Function LoginFormAccess(data As IO.Stream) As String
(...)
end function
如果我没有提到“Application / Json”,我可以检索发布在 data 流中的客户端json类型的主体。如果我这样做,我会得到错误的请求答案。
为什么有关内容类型值的行为有如此大的差异?什么是提供这样的差异?该方法是否需要其他类型的参数,或者其他必须更改或检查的内容?
ADDED:如果内容类型为“Application / Json”并且正文为空,那么它可以正常运行......!
注1:负责接听来电的班级实例化。 (一个 new()中的trace证明了这一点。所以,问题似乎是服务器找不到适当的方法来调用该对象......
注2:我使用不同的客户端遇到这个问题,所以我很漂亮 肯定是服务器端问题。
注3:我使用了WCF REST服务应用程序模板来创建 我的项目。
注4:提及“ResponseFormat = WebMessageFormat.Json”和“RequestFormat = WebMessageFormat.Json”没有帮助。
答案 0 :(得分:1)
当您向请求添加content-type
标头时,您要在请求中指定数据的内容类型,而不是您期望的内容见返回。
我从你发布的内容中得知你是在向服务发布XML,当你将content-type
设置为JSON时,你破坏了服务器解析主体的能力。你的工作模糊不清“如果内容类型是”Application / Json“并且正文是空的”可能会证明这一点(假设你的意思是你的请求的主体,而不是响应的主体)。
您可以通过添加XML而不是JSON的内容类型来证明这一点 - 如果它与您请求的实际正文相匹配,则可以正常工作。
简而言之:它提出了“错误请求”错误,因为您的请求是指定JSON内容而您没有发送JSON。