2017-05-31 9 views
0

Je tente de mettre à jour un champ d'un élément de travail sur TFS à l'aide de l'API TFS conformément au Microsoft document. Il ya quelque chose de mal avec l'API "Mettre à jour les éléments de travail" lorsque vous utilisez l'exemple de code affiché sur la page, le code de retour est 400. Peu importe ce que j'ai fait, le code d'état est toujours 400 de l'aide?Erreur lors de l'utilisation de l'API TFS concernant la mise à jour des éléments de travail (HTTP Status 400)

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



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

    Object[] patchDocument = new Object[3]; 

    patchDocument[0] = new { op = "test", path = "/rev", value = "1" }; 
    patchDocument[1] = new { op = "add", path = "/fields/Microsoft.VSTS.Common.Priority", value = "2" }; 
    patchDocument[2] = new { op = "add", path = "/fields/System.History", value = "Changing priority" }; 

    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"); // mediaType needs to be application/json-patch+json for a patch call 

    var method = new HttpMethod("PATCH"); 
    var request = new HttpRequestMessage(method, "https://accountname.visualstudio.com/_apis/wit/workitems/" + _id + "?api-version=2.2") { Content = patchValue }; 
    var response = client.SendAsync(request).Result; 

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

Répondre

0

Vous utilisez une mauvaise mediaType, il devrait être 'application/JSON-patch + JSON' non 'application/JSON.

var patchValue = new StringContent(JsonConvert.SerializeObject(patchDocument), Encoding.UTF8, "application/json-patch+json"); 

Dans l'exemple de code, il vous a déjà noté:

// mediaType doit être application/JSON-patch + JSON pour un appel patch

Vous êtes invoquez un appel de correctif, par conséquent, remplacez mediaType par application/json-patch+json.

+0

Merci pour votre aide, le code d'erreur 400 disparaît après avoir changé le type de média. Après que j'essayais de changer le /fields/System.Description d'un certain article de travail, mais la valeur de retour du statut http est 400, avez-vous une idée du code d'erreur? Merci! – RickyXRQ

+0

@RickyXRQ Après avoir publié le nouveau numéro, postez le nouveau lien ici et je vous aiderai. –

+0

https://stackoverflow.com/questions/44300710/error-when-using-tfs-api-concerning-updating-work-items-http-status-500 @ Tingting0929-MSFT – RickyXRQ