Nous utilisons TFS 2015 et allons passer à TFS 2017.
Comme nous avons beaucoup de collections (environ 17), nous devons parfois vérifier manuellement les valeurs de toutes les collections. Pour pallier à cela, je prévois d'interroger les API de TFS Rest, afin de récupérer les valeurs.
J'ai quelques questions concernant la manière de procéder avec Rest API, car nous pouvons utiliser les approches suivantes :
1.) Utilisez les paquets Nuget comme :
Microsoft.TeamFoundationServer.Client
Microsoft.VisualStudio.Services.Client
Microsoft.VisualStudio.Services.InteractiveClient
Cela nécessite le code suivant :
//Prompt user for credential
VssConnection connection = new VssConnection(new Uri(vstsCollectionUrl), new VssBasicCredential(string.Empty, pat));
//create a wiql object and build our query
Wiql wiql = new Wiql()
{
Query = "Select [State], [Title] " +
"From WorkItems " +
"Where [Work Item Type] = 'Bug' " +
"And [System.TeamProject] = '" + project + "' " +
"And [System.State] <> 'Closed' " +
"Order By [State] Asc, [Changed Date] Desc"
};
//create http client and query for resutls
WorkItemTrackingHttpClient witClient = connection.GetClient<WorkItemTrackingHttpClient>();
Wiql query = new Wiql() { Query = "SELECT [Id], [Title], [State] FROM workitems WHERE [Work Item Type] = 'Bug' AND [Assigned To] = @Me" };
WorkItemQueryResult queryResults = witClient.QueryByWiqlAsync(query).Result;
//Display reults in console
if (queryResults == null || queryResults.WorkItems.Count() == 0)
{
Console.WriteLine("Query did not find any results");
}
2.) Une autre approche consiste à accéder aux API Rest en utilisant HttpClient avec PAT ou Alternate Credentials, comme dans le cas suivant :
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(
"Basic", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(
$"{username}:{password}")));
using (HttpResponseMessage response = client.GetAsync(
$"https://dev.azure.com/{account}/_apis/projects").Result)
{
response.EnsureSuccessStatusCode();
repsonseBody = await response.Content.ReadAsStringAsync();
}
}
Quelle est la différence entre les 2 approches et quelle est l'approche recommandée qui fonctionnerait avec la version 2017 de TFS ?
Toute aide, suggestion ou lien serait le bienvenu.
L'authentification OAuth fonctionne-t-elle également avec TFS, comme avec Azure Devops ?