2016-07-14 6 views
1

Я взломал как извлекать данные с помощью API, но теперь я пытаюсь подтолкнуть новый рабочий элемент к проекту, и я просто не могу заставить его работать здесь. мой C#:Как использовать Visual Studio Team Services API

try { 
     using (HttpClient client = new HttpClient()) { 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(
      ASCIIEncoding.ASCII.GetBytes(
       string.Format("{0}:{1}", "", token)))); 

     string Url = $"https://XXX/DefaultCollection/{Job.Project}/_apis/wit/workitems/$Task?api-version=1.0"; 
     var method = new HttpMethod("PATCH"); 
     var request = new HttpRequestMessage(method, Url) { 
       Content = new StringContent(Job.WorkItem, Encoding.UTF8, 
          "application/json-patch+json") 
        }; 

     using (HttpResponseMessage response = client.SendAsync(request).Result) { 
         response.EnsureSuccessStatusCode(); 
         string responseBody = response.Content.ReadAsStringAsync().Result;       
        } 
       } 
      } 
      catch (Exception ex) { 
       MessageBox.Show(ex.ToString()); 
       return null; 
      } 

Вот Job.WorkItem, как показано в отладчике

"[ 
    { 
     \"op\":\"add\", 
     \"path\":\"/fields/System.Title\", 
     \"value\":\"Please add a business area for XXX Systems\\n\" 
    } 
]" 

ли я что-то пропустил или делать что-то неправильно, поскольку это отвечает

{StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    Pragma: no-cache 
    X-TFS-ProcessId: xxx 
    Strict-Transport-Security: max-age=31536000; includeSubDomains 
    Access-Control-Allow-Origin: * 
    Access-Control-Max-Age: 3600 
    Access-Control-Allow-Methods: OPTIONS,GET,POST,PATCH,PUT,DELETE 
    Access-Control-Expose-Headers: ActivityId,X-TFS-Session,X-MS-ContinuationToken 
    Access-Control-Allow-Headers: authorization 
    X-FRAME-OPTIONS: SAMEORIGIN 
    X-VSS-UserData: xxxx 
    ActivityId: xxxx 
    X-TFS-Session: xxx 
    X-Content-Type-Options: nosniff 
    Cache-Control: no-cache 
    Date: Wed, 13 Jul 2016 16:48:28 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" 
    Server: Microsoft-IIS/8.5 
    X-AspNet-Version: 4.0.30319 
    X-Powered-By: ASP.NET 
    Content-Length: 429 
    Content-Type: application/json; charset=utf-8 
    Expires: -1 
}} 

Я пропустил некоторые детали с помощью xxx только FYI

ответ

1

Для конкретных действий вы должны обратиться к REST Api documentation.

Кроме того, поскольку вы вызываете его из .net, возможно, client lib для VSO Api - это более простой способ пойти?

+0

плохо смотри в клиентскую библиотеку, я использовал документы API, и я думал, что сделал все правильно –

0

В документе Job.WorkItem имеются избыточные двойные кавычки, которые будут вызывать плохой запрос. Содержание должно быть:

[ 
    { 
     \"op\":\"add\", 
     \"path\":\"/fields/System.Title\", 
     \"value\":\"Please add a business area for XXX Systems\\n\" 
    } 
] 

Обратитесь к этой ссылке для деталей: Create a work item.

Смежные вопросы