我正在使用fiddler向WCF Web服务发送POST请求,并且服务以HTTP 400响应:请求具有无效的标头名称。 帖子请求如下所示:
User-Agent: Fiddler
Host: localhost:49392
Content-Type: application/json
Content-Length: 0
{ "clientFirstName" : "John"}
我的端点定义如下:
[OperationContract]
[System.ServiceModel.Web.WebInvoke
(Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json,
BodyStyle = System.ServiceModel.Web.WebMessageBodyStyle.Wrapped,
UriTemplate = "MakeReservation")]
String MakeReservation(Stream reservationStream);
更多
首先,JSON位于错误的窗格中。我将其移至“请求正文”窗格。
我更改了函数的原型,将String而不是Stream作为输入参数。该服务现在接受我的调用并返回200,但在调试器中我看到输入参数String为null。当我把它改回Stream时,我再次得到400。
更多
启用跟踪会在跟踪文件中显示以下消息:
Incoming message for operation 'MakeReservation' (contract 'ITalLimoService' with namespace
'http://tempuri.org/') contains an unrecognized http body format value 'Json'. The expected body
format value is 'Raw'. This can be because a WebContentTypeMapper has not been configured on the
binding. See the documentation of WebContentTypeMapper for more details.
正如WebInvoke definitiuon所述,RequestFormat和ResponseFormat都设置为WebMessageFormate.Json。为什么IIS抱怨这个?
答案 0 :(得分:2)
我不知道为什么会这样,但出于某种原因,从提琴手Composer中移除以下行就可以了:
Content-Type: application/json
就是这样。我会给点解释。
答案 1 :(得分:0)
我知道这篇文章很老了。但非常奇怪,当我删除标题“application / json”时,它起作用了。
是否与服务器设置有关?
答案 2 :(得分:-1)
由于语法变形,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求。如果请求服务器使用的格式正确,但数据不正确。例如:发布String值到API端点,期望String值;但是,字符串的值包含其他内容的数据。
请求实体的语法是正确的(因此400(错误请求)状态代码是不合适的)但是无法处理包含的指令。例如,如果XML请求主体包含语法正确但语义错误的XML指令,则可能会出现此错误情况。