我正在使用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"
}
在Rest-Service-Config of Apigility中接受白名单:
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的问题吗?
答案 0 :(得分:8)
当Apigility无法反序列化来自客户端的数据时,您收到415不支持的媒体类型错误。最近called out中的documentation为<{3}}。
我怀疑您的问题是由邮递员发送的内容类型造成的。请特别注意为服务列出的Content-Type白名单,并确保它包含您要发送的内容类型。
例如,如果您的服务在Content-Type白名单中只有application / json,并且您使用postman发送PUT / PATCH为x-www-form-urlencoded,则会收到415错误的Unsupported Media Type。如果您更改邮递员以使用内容类型的application / json发送PUT / PATCH并且请求正文包含有效的JSON,则Apigility应接受该请求。
您可以点击“发送”按钮右侧的“预览”按钮,查看邮递员发送的内容类型。
答案 1 :(得分:1)
我在Postman中遇到类似的问题,媒体类型响应不受支持。但是,我使用我公司的API在PUT和POST请求中都遇到了这种响应。
我通过另一个名为Advanced REST Client的类似Chrome扩展程序运行相同的请求,验证了Postman是问题,而不是正在使用的请求/ API。我不熟悉Apigility,但很确定邮差是这里的罪魁祸首。
希望有一个解决此问题的方法,因为Postman及其集合功能比高级REST客户端更容易使用。
答案 2 :(得分:0)
转到普通标签页(或其他auths标签页)并添加标题:
Content-Type application / json(或您需要的任何类型)
答案 3 :(得分:0)
我遇到了同样的问题,
我的解决方案是将我的数据以json格式以[raw]格式写入[Body]。像这样:
{"message": "UPDATED First Post!"}
在[Headers]
中:
[KEY] Content-Type
[Value] application/json