Ошибка 406: недопустимый JSON

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

Я использую вызов Create or Replace Repository Configuration. Однако я получаю сообщение об ошибке 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 устраняет ошибку, но это не сработало для меня.


person user3464189    schedule 13.01.2015    source источник
comment
Можете ли вы добавить содержимое JSON, которое вы пытаетесь опубликовать?   -  person gareth_bowles    schedule 14.01.2015
comment
В вашей документации указано, что метод создает application/vnd.org.jfrog.artifactory.search.ArtifactUsageResult+json. Вы пробовали Request.AddHeader("Accept", "application/vnd.org.jfrog.artifactory.search.ArtifactUsageResult+json");?   -  person pmcoltrane    schedule 14.01.2015
comment
Из документов видно, что этот метод не дает ответа Json. Попробуйте удалить заголовок Accept.   -  person Martin Brown    schedule 14.01.2015
comment
Я пробовал без принятия, но получил ту же ошибку. Разве JSON в скобках не то, что он возвращает? Я не вижу производственной линии для моего метода. jfrog.com/confluence/display/RTF/   -  person user3464189    schedule 14.01.2015
comment
Разве репозиторий-config.json не то, что он возвращает? {репозиторий-config.json}   -  person user3464189    schedule 14.01.2015
comment
@gareth_bowles Я пытаюсь указать простой URL. Нет JSON. Из документации у меня сложилось впечатление, что PUT вернет некоторую строку JSON.   -  person user3464189    schedule 14.01.2015
comment
Я могу запустить тот же запрос json с почтальоном, но в коде .net возникает ошибка 406. Я использую тип application/json как почтальон, так и С#. Есть ли какая-либо специальная конфигурация для вызова jfrog?   -  person Bilgehan    schedule 19.09.2017


Ответы (4)


статус HTTP 406 означает, что если веб-сервер обнаружит, что данные, которые он хочет вернуть, неприемлемо для клиента, он возвращает заголовок, содержащий код ошибки 406. Клиент может определить характеристики данных, которые он будет принимать обратно с веб-сервера, используя заголовки accept.
В этом случае вы объявляете, что хотите принять application/json:

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

однако вызываемый вами метод REST API возвращает text/plain.
Вам следует изменить код, чтобы он принимал text/plain:

Request.AddHeader("Accept", "text/plain");
person Dror Bereznitsky    schedule 15.01.2015

Хотел добавить это для будущих пользователей, таких как я. У меня была та же проблема, и я попробовал запрос с Postman и увидел, что Content-Type был «application/hal+json». Я безуспешно пробовал его с application/json.

Таким образом, запустив тест в почтальоне, я смог выяснить, что именно нужно серверу.

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

Я столкнулся с той же ошибкой 406: неприемлемо при попытке получить JSON на другом сайте. В моем случае я мог видеть правильный JSON при вводе URL-адреса в поле адреса моего браузера. Но загрузка его с того же URL-адреса через мой код С# приводила к ошибке 406. Ни один из ответов в этой теме не решил мою проблему напрямую. Но по крайней мере они указали мне, что дело в заголовках HTTP.

Поэтому я погуглил эту страницу: https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending и добавил все заголовки браузера в свой код, и вуаля! Он начал работать. В моем случае было достаточно заполнить некоторые данные в заголовке user-agent.

person Sergey    schedule 04.09.2020

Во-первых, в заголовке 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
person JBaruch    schedule 14.01.2015