J'essaie de définir les zones associées à une équipe sur un serveur sur site TFS 2017 à l'aide de l'API et du PowerShell restants.

Quand j'essaye d'appeler mon URI

http://MyTfsServer:8080/tfs/DefaultCollection/TeamProject/TeamName/_apis/Work/TeamSettings/TeamFieldValues?api-version=2.0-preview.1

Comme expliqué dans le Exemple d'API avec un package json, j'obtiens le retour d'erreur suivant:

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"Value cannot be null.
\r\nParameter name: patch","typeName":"System.ArgumentNullException, mscorlib, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"typeKey":"ArgumentNullException","errorCode":0,"eventId":0}
+ ...   $result = Invoke-RestMethod -Method Patch -Uri $setTeamAreaPathUri  ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
{
   "defaultValue":  "TeamProject\\Area1",
    "Values":  [
                   {
                       "value":  "Area2\\Area21\\Area211",
                       "includeChildren":  false
                   },
                   {
                       "value":  "Area3\\Area31\\Area311",
                       "includeChildren":  false
                   }
               ]

}

Mettre à jour

J'appelle l'URI ci-dessus avec l'applet de commande PowerShell Invoke-RestMethod

Invoke-RestMethod -Method Patch -Uri $setTeamAreaPathUri -UseDefaultCredentials -Body $json -ContentType "application/json"

$setTeamAreaPathUri correspond à l'URI http ci-dessus. Dois-je utiliser post comme méthode webrequest plutôt que patch?

Je suis parfaitement capable d'obtenir une réponse du même URI en utilisant une requête get. Cependant, impossible de modifier les zones d'équipe existantes à l'aide de la méthode de patch :-(

Mise à jour 2

Cela semble lié à l'inclusion des chars scandinaves 'æøå' dans le chemin de la zone. Si j'exclus tous les chemins de zone qui incluent æ, ø ou å, je n'obtiens aucune erreur. Ce n'était pas évident d'après mon exemple ... désolé! Existe-t-il un moyen d'analyser le json pour que le serveur TFS ne s'arrête pas dessus? Ou est-ce à cause de mon manque de maîtrise de l'appel de l'api de repos PowerShell?

2
llykke 16 janv. 2017 à 17:46

2 réponses

Meilleure réponse

Il semble que tout cela était lié aux chemins de zone contenant des caractères spéciaux, par exemple æ, ø, å qui sont principalement utilisés en Scandinavie.

Si j'ai spécifié mon type de contenu lors de l'appel de invoke-restmethod comme

-ContentType "application/json;charset=utf-8"

Je n'ai aucun problème pour appeler la méthode patch de l'API.

Désolé pour le dérangement!

Et merci pour votre aide!

3
llykke 17 janv. 2017 à 22:28

Je ne peux pas non plus reproduire ce problème. Cela semble se produire parce que l'objet patch est nul. Pourriez-vous essayer cela avec Postman pour tester l'API? En outre, la valeur par défaut doit être l'une des valeurs de champ d'équipe autorisées par l'équipe.

0
Ajay - MSFT 17 janv. 2017 à 19:58