Fiddler POST无效的标题名称

时间:2014-09-16 06:42:07

标签: wcf rest fiddler

我正在使用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抱怨这个?

3 个答案:

答案 0 :(得分:2)

我不知道为什么会这样,但出于某种原因,从提琴手Composer中移除以下行就可以了:

Content-Type: application/json

就是这样。我会给点解释。

答案 1 :(得分:0)

我知道这篇文章很老了。但非常奇怪,当我删除标题“application / json”时,它起作用了。

是否与服务器设置有关?

答案 2 :(得分:-1)

由于语法变形,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求。如果请求服务器使用的格式正确,但数据不正确。例如:发布String值到API端点,期望String值;但是,字符串的值包含其他内容的数据。

请求实体的语法是正确的(因此400(错误请求)状态代码是不合适的)但是无法处理包含的指令。例如,如果XML请求主体包含语法正确但语义错误的XML指令,则可能会出现此错误情况。