【问题标题】:WCF returns HTTP 400 when Content-Type is not Set to application/json in Postman, else it works fine.当 Postman 中的 Content-Type 未设置为 application/json 时,WCF 返回 HTTP 400,否则它可以正常工作。
【发布时间】:2017-09-15 22:26:12
【问题描述】:

我希望构建一个可以接收、处理和返回 JSON 的 WCF。但我想要的是即使 Http 请求的 Content-Type 未设置为 application/json 也能工作。[这就是请求系统在请求中发送的方式]

我的合同如下所示:

 [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "/MethodName", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]

我通过邮递员测试这个 wcf 服务。当我将 HTTP 内容类型作为 application/json 发送时,它工作得非常好。但由于某种原因,调用我的 wcf 的系统没有明确发送。因此,如果我在邮递员客户端中禁用内容类型,我会得到 HTTP 400。

我在 IIS7 上托管它。我需要在那里指定什么吗?

如何使我的 WCF 接受未明确设置为 content-type:application/json 的请求。

【问题讨论】:

  • 我也尝试更改为WebMessageBodyStyle.Bare,但没有帮助。

标签: c# rest wcf iis content-type


【解决方案1】:

我有同样的问题。 HTTP 1.1 specification:,Content-Type 不是强制性的。

任何包含实体主体的 HTTP/1.1 消息都应该包含一个 定义该主体的媒体类型的 Content-Type 标头字段。如果和 仅当媒体类型不是由 Content-Type 字段给出时, 接收者可以尝试通过检查其媒体类型来猜测媒体类型 URI 的内容和/或名称扩展名,用于标识 资源。如果媒体类型仍然未知,接收者应该 将其视为“application/octet-stream”类型。

但它看起来像 wcf RequestFormat = WebMessageFormat.Json 不起作用。您必须在标题中指定内容类型。在这里您可以阅读更多相关信息:Can I call a WCF service without setting content-type?

【讨论】:

    猜你喜欢
    • 2010-12-18
    • 1970-01-01
    • 2016-10-02
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多