【问题标题】:Error 406 Not Acceptable JSON错误 406 不可接受的 JSON
【发布时间】:2015-01-13 20:59:56
【问题描述】:

http://www.jfrog.com/confluence/display/RTF/Artifactory+REST+API#ArtifactoryRESTAPI-CreateorReplaceRepositoryConfiguration

我正在使用创建或替换存储库配置调用。但是我收到 406 错误:不可接受。其他 PUT 调用正常,但不返回 JSON。我相信 JSON 是错误的根源,但无法解决或证明这一点。

我添加了如下代码

RestClient Client = new RestClient(uriString);
RestRequest Request = new RestRequest(requestType);

Request.AddHeader("Authorization", "Basic " + credentials);
Request.AddHeader("Accept", "application/json");

我已经看到添加标头以接受 JSON 可以解决错误的线程,但这对我不起作用。

【问题讨论】:

  • 您可以添加您要发布的 JSON 内容吗?
  • 您的文档指出该方法产生application/vnd.org.jfrog.artifactory.search.ArtifactUsageResult+json。你试过Request.AddHeader("Accept", "application/vnd.org.jfrog.artifactory.search.ArtifactUsageResult+json");吗?
  • 从文档看来,该方法没有给出 Json 响应。尝试删除 Accept 标头。
  • 我确实尝试过不接受但得到了同样的错误。括号中的 JSON 不是它返回的内容吗?application/vnd.org.jfrog.artifactory.search.ArtifactUsageResult+json 是针对不同的调用返回的。我没有看到我的方法的生产线。 jfrog.com/confluence/display/RTF/…
  • repository-config.json 不是它返回的吗? { 存储库配置.json }

标签: c# json api artifactory


【解决方案1】:

406 HTTP status 表示如果 Web 服务器检测到它要返回的数据不被客户端接受,它会返回一个包含 406 错误代码的标头。 客户端可以使用接受标头定义它将从 Web 服务器接收回来的数据的特征。
在这种情况下,您声明您愿意接受application/json

Request.AddHeader("Accept", "application/json");

但是您正在调用的 REST API 方法返回 text/plain
您应该更改代码以接受文本/纯文本:

Request.AddHeader("Accept", "text/plain");

【讨论】:

    【解决方案2】:

    想为未来像我一样卡住的用户添加这个。我遇到了同样的问题,并用 Postman 尝试了请求,发现 Content-Type 是“application/hal+json”,我用 application/json 尝试它没有运气。

    所以在 postman 中运行测试,我能够弄清楚服务器到底需要什么。

    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/hal+json"));
    

    【讨论】:

      【解决方案3】:

      我在尝试在另一个站点上获取 JSON 时遇到了同样的 406 错误:不可接受。在我的情况下,当我在浏览器地址字段中输入 url 时,我可以看到正确的 JSON。但是通过我的 C# 代码从同一个 url 下载它会产生 406 错误。 本主题中的任何答案都没有直接解决我的问题。但至少他们向我指出,重点是 HTTP 标头。

      所以我用谷歌搜索了那个页面: https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending 并将所有浏览器标题添加到我的代码中,瞧!它开始起作用了。 在我的情况下,在用户代理标头中填充一些数据就足够了。

      【讨论】:

        【解决方案4】:

        首先,Accept 标头说明客户端准备返回的内容,而不是客户端发送的内容。 说明客户端发送内容的标头是Content-Type

        此外,此方法不接受application/json。正如文档中明确指出的那样,它接受以下之一:

        • application/vnd.org.jfrog.artifactory.repositories.LocalRepositoryConfiguration+json
        • application/vnd.org.jfrog.artifactory.repositories.RemoteRepositoryConfiguration+json
        • application/vnd.org.jfrog.artifactory.repositories.VirtualRepositoryConfiguration+json

        【讨论】:

          猜你喜欢
          • 2015-03-17
          • 1970-01-01
          • 2013-12-07
          • 1970-01-01
          • 2013-04-26
          • 1970-01-01
          • 1970-01-01
          • 2013-03-18
          相关资源
          最近更新 更多