2017-10-06 5 views
1

J'utilise Microsoft.VisualStudio.Services.Client pour me connecter à TFS/VSTS avec des informations d'identification différentes afin de mettre à jour les éléments de travail.Client TFS REST API .NET, TFS2017, jeton d'accès personnel: "Vous devez transmettre un document de correctif valide dans le corps de la demande."

Dans un cas où je me connecte à TFS2017 sur des prémisses et utiliser l'accès personnels Tokens (PAT), l'élément de travail créatine mise à jour échoue avec:

Vous devez passer un document de correctif valide dans le corps de la demande .

Toutes les requêtes GET fonctionnent correctement.

Le même scénario fonctionne si je me connecte à VSTS (même avec PAT) et aussi lorsque je me connecte à TFS2017 avec des informations d'identification NTLM. Le problème semble être que, pour ce scénario, TFS2017 envoie un défi d'authentification pour chaque requête (pour VSTS, il l'envoie seulement pour le premier et passe juste dans l'identifiant de session).

Le client .NET envoie le document de correctif approprié en tant que contenu de la première demande POST/PATCH, mais il n'inclut plus le contenu lorsqu'il répond au défi d'authentification. Donc le contenu de la deuxième requête est vide et cela déclenche le "Vous devez passer un document de correctif valide dans le corps de la requête". à la fin.

Je l'ai essayé différentes façons d'authentification, mais il est tout de même, le travail des demandes GET (de sorte que le auth fonctionne en général), mais les mises à jour non:

  • new VssBasicCredential(string.Empty, pat)
  • new VssCredentials(new WindowsCredential(new NetworkCredential(string.Empty, pat)))

Je pense que cela fonctionne pour VSTS, car il n'y a le défi d'authentification que pour la première demande (GET), et pas pour les demandes POST/PATCH plus tard.

Des conseils sur la façon de faire fonctionner ce scénario?

Répondre

1

Je fais tout avec Microsoft.TeamfoundationServer.Client + Microsoft.AspNet.WebApi.Client maintenant. Il existe des clients HTTP pour tous les services TFS/VSTS. J'avais l'habitude de développer mon propre client parce que la bibliothèque n'était pas très grande en avril. Je me souviens d'avoir les mêmes problèmes avec l'authentification. Je l'habitude de se connecter avec:

credentials = new VssCredentials(useDefaultCredentials: true); 
connection = new VssConnection(new Uri(uriString), credentials); 

je pour obtenir le HttpMessageHandler de la connexion et ainsi de suite. L'indice sur l'obtention de l'authentification correcte était d'abord la connexion via VS ou un navigateur.

L'autre façon était de donner l'authentification correcte dans le HttpClient.

Cela a fonctionné avec POST et GET.

Ma configuration est une TFS2015 et VS2017. J'espère que cela vous aide en quelque sorte

+0

Thx! Mon outil s'exécute dans une session non interactive, donc la connexion via une fenêtre de navigateur n'est pas une option. Peut-être que mon problème est également lié à http vs https que je n'avais pas envisagé auparavant. Mais j'ai besoin de mettre en place un test env pour ça. –

+0

J'espère que vous pouvez travailler avec ceci: https://docs.microsoft.com/fr/fr/vsts/integra/get-started/reste/samples – weiky