207

在我的 Ruby on Rails 应用程序中,我尝试通过 POSTMAN REST客户端以Base64格式上传图像。当我发布图像时,我收到406 Not Acceptable Response。当我检查我的数据库时,图像在那里并成功保存。

这个错误的原因是什么,我需要在标题中指定什么吗?

我的请求:

网址--- http://localhost:3000/exercises.json

标题:

Content-Type  -  application/json

原始数据:

{
    "exercise": {
        "subbodypart_ids": [
            "1",
            "2"
        ],
        "name": "Exercise14"
    },
    "image_file_name": "Pressurebar Above.jpg",
    "image":"******base64 Format*******"
}
4

9 回答 9

290

您的操作没有失败。

您的后端服务说它返回的响应类型未在您的客户端请求的Accept HTTP 标头中提供。

参考:http ://en.wikipedia.org/wiki/List_of_HTTP_header_fields

  1. 找出 Service 返回的响应(内容类型)。
  2. 在您的请求 Accept 标头中提供此(内容类型)。

http://en.wikipedia.org/wiki/HTTP_status_code -> 406

于 2013-01-10T06:52:00.977 回答
44

406 Not Acceptable 请求标识的资源只能生成响应实体,其内容特征根据请求中发送的accept headers不可接受。

当服务器无法使用请求中指定的接受标头进行响应时,会发生 406。在您的情况下,服务器似乎无法接受响应的 application/json 。

于 2013-01-10T06:17:03.977 回答
8

您提到您使用 Ruby on Rails 作为后端。您没有发布相关方法的代码,但我猜它看起来像这样:

def create
  post = Post.create params[:post]
  respond_to do |format|
    format.json { render :json => post }
  end
end

将其更改为:

def create
  post = Post.create params[:post])
  render :json => post
end

它会解决你的问题。它对我有用:)

于 2014-08-03T08:41:31.447 回答
4

“有时”这可能意味着服务器有一个内部错误,并且想要响应错误消息(例如:带有 JSON 有效负载的 500),但由于请求标头没有说它接受 JSON,所以它返回 406。去搞清楚。(在这种情况下:spring boot webapp)。

在这种情况下,您的操作确实失败了。但是失败的消息被另一个掩盖了。

于 2018-05-08T22:08:09.407 回答
3

当在浏览器中存储或引用无效 cookie 时,您也可能会收到 406 响应 - 例如,在本地以 Dev 模式运行 Rails 服务器时。

如果您碰巧在同一个端口上运行了两个不同的项目,浏览器可能会引用来自不同 localhost 会话的 cookie。

这发生在我身上......让我绊倒了一分钟。查看浏览器 > 开发人员模式 > 网络显示它。

于 2016-07-31T22:50:24.120 回答
1

就我而言,我补充说:

Content-Type: application/x-www-form-urlencoded

完全解决了我的问题。

于 2016-08-29T23:10:53.817 回答
1
const request = require('request');

const headers = {
    'Accept': '*/*',
    'User-Agent': 'request',
};

const options = {
    url: "https://example.com/users/6",
    headers:  headers
};

request.get(options, (error, response, body) => {
    console.log(response.body);
});
于 2016-12-09T19:56:00.183 回答
0

如果您使用的是“request.js”,则可以使用以下内容:

var options = {
  url: 'localhost',
  method: 'GET',
  headers:{
    Accept: '*/*'
  }
}

request(options, function (error, response, body) {
  ...
})
于 2019-07-01T12:48:54.247 回答
0

对于 .NET-Core 中的 API,该 api 设置为使用 XML(默认设置为使用 JSON 响应),因此我在 Controller 中添加了此注释:

[Produces("application/xml")]
public class MyController : ControllerBase {...}

谢谢你让我走上这条路!

于 2019-09-16T06:55:31.247 回答