Я немного новичок в использовании REST API для Azure DevOps, и он отлично работает, когда я могу отправлять свои запросы, которые в основном являются URI, которые я вижу на веб-сайте для API. Затем я получаю ответ JSON, де-сериализую его в класс из ответа JSON и выключаюсь.
Ниже приведен пример функции, которую я использую для получения рабочего элемента по его идентификатору. . Он использует URI с веб-сайта. Я также могу протестировать вещи, вставив URI в свой браузер, а затем посмотреть ответ.
Мой вопрос: как использовать команду для обновления рабочего элемента (например, Добавить ссылку), которая не является URI, который Я могу протестировать, вставив его в свой браузер. Вместо этого это сообщение JSON.
это веб-сайт API, на котором отображается сообщение JSON, необходимое для добавления ссылки на рабочий элемент. https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/work%20items/update?view=azure-devops-rest-5.1#add -a-link
это сообщение JSON, которое они содержат для обновления ссылки на рабочий элемент: [{"op": "test", "path": " / rev "," value ": 3}, {" op ":" add "," path ":" / Relations / - "," value ": {" rel ":" System.LinkTypes.Dependency-forward ", "url": "https://dev.azure.com/fabrikam/_apis/wit/workItems/300", "attributes": {"comment": "Создание новой ссылки для зависимости"}}}]
Нужна ли мне другая функция для отправки JSON сообщение, а затем функция могла бы вернуть мне JSON Response? Я не могу найти пример того, как может выглядеть эта функция.
Мы будем очень признательны за любые советы о том, как отправить сообщение JSON вместо URI для получения ответа.
===================== ОБНОВЛЕНИЕ =====================
один ответ определенно помог мне наконец заработать. Я вставил обновленную функцию на случай, если она кому-то поможет. Я знаю, что найти для этого образцы VB. NET сложно. :)
СПАСИБО!
ОБНОВЛЕННЫЙ КОД ================================ ==========================
Public Async Function GetRequestAsync(ByVal uri As String, Optional ByVal jsonMessageBody As String = "") As Task(Of String())
Dim client As HttpClient = New HttpClient()
SetUpHttpClient(client)
Dim statusCode As String = "NOTHING"
Dim responseBody As String = "NOTHING"
Try
If jsonMessageBody.Length > 0 Then
'############## ############################################### ##### '### Для всех операций PATCH, которые имеют URI и сообщение JSON ###' ###################### ########################################### Dim patchValue = New StringContent (jsonMessageBody, Encoding.UTF8, "application / json -patch + json") Dim method = New HttpMethod ("PATCH") Dim request = New HttpRequestMessage (method, uri) With {.Content = patchValue} Тусклый ответ = client.SendAsyn c (запрос) .Result responseBody = response.Content.ReadAsStringAsyn c .Result () Else '##################### ############################### '### Для всех других операций, имеющих только URI ###' ############################################### ##### Использование ответа как HttpResponseMessage = client.GetAsyn c (uri) .Result statusCode = response.StatusCode.ToString () response.EnsureSuccessStatusCode () r esponseBody = response.Content.ReadAsStringAsyn c (). Result End Using End If Catch End Try Dim answer As String () = {statusCode, responseBody} Вернуть ответ End Function
Public Function GetTestCase(organization As String, project As String, TestCaseID As String) As WorkItemApi
Dim dc As New DevCon.DevOpsConnector
Dim response As String() = dc.GetRequest($"https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{TestCaseID}?api-version=5.1&$expand=all")
If response(0) <> "OK" Then
Return Nothing
End If
Dim result As WorkItemApi = JsonConvert.DeserializeObject(Of WorkItemApi)(response(1))
Return result
End Function
Public Async Function GetRequestAsync(ByVal getRequest As String) As Task(Of String())
Dim client As HttpClient = New HttpClient()
SetUpHttpClient(client)
Dim statusCode As String = "NOTHING"
Dim responseBody As String = "NOTHING"
Try
Using response As HttpResponseMessage = client.GetAsync(getRequest).Result
statusCode = response.StatusCode.ToString()
' Console.WriteLine("Response: " & statusCode)
response.EnsureSuccessStatusCode()
responseBody = response.Content.ReadAsStringAsync().Result
End Using
Catch
End Try
Dim answer As String() = {statusCode, responseBody}
Return answer
End Function