2017-06-01 6 views
0

J'essaie de mettre à jour un champ (/fields/System.Description) d'un élément de travail sur TFS en utilisant l'API TFS conformément au document Microsoft officiel. Il y a quelque chose de mal avec l'API "Mettre à jour les éléments de travail" lorsque vous utilisez l'exemple de code indiqué sur la page, le code de retour de la réponse est 500 si je veux ajouter ou remplacer un certain vouloir "tester" une valeur, quelqu'un peut-il s'il vous plaît me donner un peu d'aide?Erreur lors de l'utilisation de l'API TFS concernant la mise à jour des éléments de travail (HTTP Status 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; 
      } 
     } 
    } 

et voici l'état de retour:

{StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Contenu: System.Net.Http.StreamContent, en-têtes: {Pragma: no-cache X-TFS-ProcessId: xxxxxxxxxxxxxxxx X-FRAME-OPTIONS: SAMEORIGIN X-VSS-UserData: xxxxxxxxxxxxxxxxxxxxxxxxxx: ActivityId xxxxx: xxxxxxxxxxxxxxxxxxxxxxxxxxxx X-TFS-session: XXXXXXXXXXXXXXXXX LFS-Authentifier: X- NTLM Type de contenu-Options: nosniff Cache-Control: no-cache Date: Jeu, 01 Juin 2017 06:50:04 GMT P3P: CP = "CAO DSP COR ADMa DEV CONo TELO CUR PSA PSD TAI IVNotre SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT "Serveur: Microsoft-IIS/7.5 Version X-AspNet: 4.0.30319 X-Powered-By: ASP.NET Longueur du contenu: 428 Type de contenu: application/json; charset = utf-8 Expire: -1}}

+0

J'ai testé le code que vous avez posté ci-dessus, c'est correct. Pouvez-vous trouver d'autres journaux d'erreurs dans la visionneuse d'événements? Il y a beaucoup de raisons ont provoqué l'erreur 500. Avez-vous activé [Basic Authentication] (https://github.com/Microsoft/tfs-cli/blob/master/docs/configureBasicAuth.md) sur votre serveur TFS? Utilisez-vous TFS 2017? –

+1

@ Tingting0929-MSFT Le code d'état est 200 à l'heure actuelle, mais je n'ai rien fait aujourd'hui. Je ne sais pas pourquoi cela a fonctionné sans aucune opération, mais merci pour votre aimable aide ces jours-ci. J'ai peut-être besoin de tester plus pour localiser le problème possible. – RickyXRQ

Répondre

0

J'ai essayé de faire la même demande, mais seulement sans la partie MyCollection dans l'url et cela a fonctionné.

essayez de le faire vous-même. Danny

+0

Le code d'état est 200 à l'heure actuelle, mais je n'ai rien fait aujourd'hui. Je ne sais pas pourquoi cela a fonctionné sans aucune opération, mais merci pour votre aide. J'ai peut-être besoin de tester plus pour localiser le problème possible. – RickyXRQ