4

我正在使用 Zend Framework 2 和 Zend Framework 的 Apigility 构建一个 RESTful API。对于测试,我使用 chrome 扩展 Postman REST-Client。

通过毫无问题地发送表单数据,我可以毫无问题地执行 GET 请求和 POST 请求。

但是当我尝试执行 PUT、PATCH 或 DELETE 请求时,我收到以下错误:

{
    "type":"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html",
    "title":"Unsupported Media Type",
    "status":415,
    "detail":"Invalid content-type specified"
}

在 Apigility 的 Rest-Service-Config 中接受白名单:

application/vnd.timber-ms.v1+json, application/hal+json, application/json

内容类型白名单:

application/vnd.timber-ms.v1+json, application/json

响应的内容类型是application/problem+json

我能做些什么来解决这个问题并成功完成 PUT/PATCH 请求?这是 Postman 还是 Apigility 的问题?

4

4 回答 4

9

当 Apigility 无法反序列化来自客户端的数据时,您会收到 Unsupported Media Type 的 415 错误。这最近在文档中提及。

我怀疑您的问题是由于邮递员发送的内容类型造成的。请特别注意为服务列出的内容类型白名单,并确保它包含您要发送的内容类型。

例如,如果您的服务在 Content-Type 白名单中只有 application/json,并且您将 PUT/PATCH 与 postman 作为 x-www-form-urlencoded 发送,您将收到 Unsupported Media Type 的 415 错误。如果您更改邮递员以发送内容类型为 application/json 的 PUT/PATCH 并且请求正文包含有效的 JSON,Apigility 应该接受该请求。

您可以通过单击“发送”按钮右侧的“预览”按钮来检查邮递员发送的内容类型。

于 2014-04-19T01:56:59.260 回答
1

我在 Postman 中遇到了类似的问题,媒体类型响应不受支持。但是,我使用我公司的 API 在 PUT 和 POST 请求上都遇到了这种响应。

我通过使用另一个名为 Advanced REST Client 的类似 Chrome 扩展程序运行相同的请求,验证了 Postman 是这里的问题,而不是正在使用的请求/API。我不熟悉 Apigility,但很确定 Postman 是这里的罪魁祸首。

希望能解决这个问题,因为 Postman 及其集合功能比高级 REST 客户端更容易使用。

于 2014-04-15T20:27:46.713 回答
0
  • 在邮递员上转到普通选项卡(或其他身份验证选项卡)并添加标题:

    Content-Type application/json (或任何你需要的类型)

于 2015-04-12T07:18:53.473 回答
0

我有同样的问题,

我的解决方案是以 json 格式以 [raw] 将我的数据写入 [Body]。像这样:

{"message": "UPDATED First Post!"}

[Headers]

[KEY]   Content-Type 
[Value] application/json
于 2019-09-26T15:29:43.410 回答