Ошибка при использовании TFS API, касающаяся обновления рабочих элементов (состояние HTTP 500).

Я пытаюсь обновить поле (/fields/System.Description) рабочего элемента в TFS, используя API TFS в соответствии с официальным документом Microsoft. Что-то не так с API «Обновить рабочие элементы» при использовании примера кода, указанного на странице, возвращаемый код состояния ответа равен 500, если я хочу «добавить» или «заменить» определенный файл, но успех, если я хотите «проверить» значение, может ли кто-нибудь помочь мне?

using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

using Newtonsoft.Json;

public static void UpdateWorkItemUpdateField()
    {
        string _personalAccessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        string _credentials = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", _personalAccessToken)));
        string _id = "111";

        Object[] patchDocument = new Object[1];

        patchDocument[0] = new { op = "replace", path = "/fields/System.Description", value = "Changing the description done" };


        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", _credentials);

            var patchValue = new StringContent(JsonConvert.SerializeObject(patchDocument), Encoding.UTF8, "application/json-patch+json"); // mediaType needs to be application/json-patch+json for a patch call
            var method = new HttpMethod("PATCH");
            var request = new HttpRequestMessage(method, "http://mysite:8080/tfs/MyCollection/_apis/wit/workitems/" + _id + "?api-version=1.0") { Content = patchValue };
            var response = client.SendAsync(request).Result;

            if (response.IsSuccessStatusCode)
            {
                var result = response.Content.ReadAsStringAsync().Result;
            }
        }
    }

и вот статус возврата:

{StatusCode: 500, ReasonPhrase: "Внутренняя ошибка сервера", версия: 1.1, содержимое: System.Net.Http.StreamContent, заголовки: {Прагма: без кэша X-TFS-ProcessId: xxxxxxxxxxxxxxxx X-FRAME-OPTIONS: SAMEORIGIN X -VSS-UserData: xxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxx ActivityId: xxxxxxxxxxxxxxxxxxxxxxxxxxxx X-TFS-Session: xxxxxxxxxxxxxxxxxxx Lfs-Authenticate: NTLM X-Content-Type-Options: nosniff Cache-Control: no-cache Дата: Чт, 01 июня 2017 г., 06:50: 04 GMT P3P: CP="CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT" Сервер: Microsoft-IIS/7.5 X-AspNet-Версия: 4.0. 30319 X-Powered-By: ASP.NET Content-Length: 428 Content-Type: application/json; charset=utf-8 Срок действия: -1}}


person RickyXRQ    schedule 01.06.2017    source источник
comment
Я проверил код, который вы разместили выше, он правильный. Можете ли вы найти другие журналы ошибок в средстве просмотра событий? Есть много причин, вызывающих ошибку 500. Включили ли вы базовую аутентификацию на своем сервере TFS? Вы используете TFS 2017?   -  person Tingting0929    schedule 02.06.2017
comment
@ Tingting0929-MSFT В настоящее время код состояния 200, но сегодня я ничего не делал. Я не знаю, почему это сработало без каких-либо операций, но спасибо за вашу помощь в эти дни. Возможно, мне придется протестировать больше, чтобы найти возможную проблему.   -  person RickyXRQ    schedule 02.06.2017


Ответы (1)


Я попытался сделать тот же запрос, но только без части MyCollection в URL-адресе, и это сработало.

попробуй сделать сам. Дэнни

person danny kaplunski    schedule 01.06.2017
comment
В настоящее время код состояния 200, но сегодня я ничего не делал. Я не знаю, почему это сработало без каких-либо операций, но спасибо за вашу любезную помощь. Возможно, мне придется протестировать больше, чтобы найти возможную проблему. - person RickyXRQ; 02.06.2017