2016-09-12 10 views
1

Я пытаюсь использовать REST API на Domino сервере, как описано здесь: Document patchНе удается отправить запрос патч к серверу Lotus Domino

Когда я отправить запрос через Postman все работает отлично, но когда я пытаюсь сделать то же самое запросите программно через RestSharp ошибка через ошибку 415 Unsupported Media Type.

  • Это мой vb.net код, который я использую, чтобы отправить запрос:

    Function Execute(request As RestRequest) As RestResponse 
         Dim client As New RestClient(baseUrl) 
         request.AddHeader("Content-Type", "application/json") 
         request.AddHeader("Accept", "application/json") 
    
    Dim response = client.Execute(request) 
    
    If response.StatusCode <> 200 Then 
        Throw New ApplicationException(response.StatusDescription) 
    End If 
    
    If response.ErrorException IsNot Nothing Then 
        Throw New ApplicationException("Error retrieving response. Check inner details for more info.", response.ErrorException) 
    End If 
    
        Return response 
    End Function 
    
    Public Sub SetState(DocUNID As String, state As String) 
    Dim request = New RestRequest() 
    request.Method = Method.PATCH 
    request.Resource = "api/data/documents/unid/{DocUNID}" 
    request.AddParameter("EMPCARDSTATE", state) 
    Execute(request) 
    End Sub 
    
  • Это мой Почтальон скриншот:

enter image description here

enter image description here

+0

Включили ли вы способ PATCH для сервера? Я считаю, что он может быть отключен по умолчанию. –

ответ

0

Служба данных возвращает 415 при отправке запроса PATCH и значение заголовка Content-Type является не приложения/JSON. Я не знаком с vb.net, но я могу только сделать вывод, это утверждение не работает, как ожидалось:

request.AddHeader("Content-Type", "application/json") 

Это утверждение выглядит неправильно мне:

request.AddParameter("EMPCARDSTATE", state) 

Вы хотите написать JSON объект к телу запроса. Я думаю, вы намерены включить свойство «EMPCARDSTATE» в объект JSON. request.AddParameter() действительно задает тело запроса?

Я рекомендую изменить свой код, чтобы правильно установить тело запроса. Это может быть все, что вам нужно для решения проблемы. Если вы все еще видите ошибку 415, вы можете использовать Fiddler (или аналогичный инструмент), чтобы проверить запрос как для заголовка Content-Type, так и для тела.

+0

Спасибо за ваш ответ, но проблема была в самом RestShart, см. Мой ответ выше. – Anatoly

0

Похоже, что проблема была в реализации RestSharp POST/PATCH vs GET. Когда я отправлял POST/PATCH с шаблоном параметра в url, как показано ниже: ...{PARAMETER}, он выбрасывал исключение. Если я конкатенирую URL-адрес перед его использованием, все работает нормально.

+1

Этот ответ можно улучшить, включив в него изменения кода, которые заставили его работать. Кроме того, в исходном сообщении говорится, что API REST возвращается 415. Этот ответ говорит, что RestSharp выбрасывает исключение. Для меня это похоже на другую проблему. –

+0

Вы правы, я буду включать код завтра. Что касается ответа, я улучшу его завтра, на самом деле это не моя проблема, я просто пытался помочь своему коллеге, который не имеет учетной записи SO, но он обнаружил ответ сам. Я просто настаивал на том, чтобы не удалять ответ, потому что это может занять много времени для кого-то другого. – Anatoly