Estoy tratando de obtener todos los proyectos usando la llamada API REST de c # y siguiendo la siguiente documentación de MSDN:

https://www.visualstudio.com/en-us/docs/integrate/api/tfs/projects

Al ejecutar GetTeamProjects() obtengo la siguiente respuesta:

respuesta {StatusCode: 404, ReasonPhrase: 'Not Found', Versión: 1.1, Contenido: System.Net.Http.StreamContent, Encabezados:

Supongo que el error puede deberse al tipo de autenticación. Estoy pasando Basic mientras mi local utiliza NTLM.

Estoy tratando de obtener los proyectos TFS para obtener los detalles del permiso del usuario.

0
Angshuman 6 mar. 2017 a las 09:41

2 respuestas

La mejor respuesta

Si tiene un problema de autenticación, debería obtener un error 401, no 404. Me temo que hay algo mal con su código. Puede consultar mi código a continuación:

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

namespace GetTeamProjectREST
{
    class Program
    {
        public static void Main()
        {
            Task t = GetTeamProjectREST();
            Task.WaitAll(new Task[] { t});
        }
        private static async Task GetTeamProjectREST()
        {
            try
            {
                var username = "domain\\username";
                var password = "password";

                using (var client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Accept.Add(
                        new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                        Convert.ToBase64String(
                            System.Text.ASCIIEncoding.ASCII.GetBytes(
                                string.Format("{0}:{1}", username, password))));

                    using (HttpResponseMessage response = client.GetAsync(
                                "http://tfsserver:8080/tfs/teamprojectCollection/_apis/projects?api-version=2.2").Result)
                    {
                        response.EnsureSuccessStatusCode();
                        string responseBody = await response.Content.ReadAsStringAsync();
                        Console.WriteLine(responseBody);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}
0
Cece Dong - MSFT 6 mar. 2017 a las 08:34

Solo uso esto sin la necesidad de habilitar la autenticación básica:

var client = new WebClient();
client.Credentials = new NetworkCredential("user", "password", "domain");
var response = client.DownloadString("http://tfsserver:8080/tfs/teamprojectCollection/_apis/projects?api-version=2.2");
1
Niel Zeeman 7 mar. 2017 a las 06:14