example ejemplos consumir consume c# .net httpclient

ejemplos - httpclient c# post



Cómo usar HttpClient para publicar con autenticación (2)

Estoy intentando hacer el siguiente rizo (que funciona para mí) en C # usando HttpClient.

curl -X POST http://www.somehosturl.com / -u <client-id>:<client-secret> / -d ''grant_type=password'' / -d ''username=<email>'' / -d ''password=<password>'' / -d ''scope=all

El Código C #:

HttpClientHandler handler = new HttpClientHandler { Credentials = new System.Net.NetworkCredential ("my_client_id", "my_client_secret") }; try { using(var httpClient = new HttpClient(handler)) { var activationUrl = "www.somehosturl.com"; var postData = "grant_type=password&[email protected]&password=mypass&scope=all"; var content = new StringContent(postData, Encoding.UTF8, "application/x-www-form-urlencoded"); var response = await httpClient.PostAsync(activationUrl, content); if(!response.IsSuccessStatusCode) return null; var result = await response.Content.ReadAsStringAsync(); return result; } } catch(Exception) { return null; }

Cuando se ejecuta, simplemente se bloquea, ni siquiera captura la excepción

Normalmente puedo GET y POST perfectamente bien, pero lo que me echa es cómo configurar las cosas de autenticación (identificación del cliente y secreto del cliente)


Intente colocar sus credenciales directamente en la propiedad de los encabezados de HttpClient.

using (var client = new HttpClient()) { var byteArray = Encoding.ASCII.GetBytes("my_client_id:my_client_secret"); var header = new AuthenticationHeaderValue("Basic",Convert.ToBase64String(byteArray)); client.DefaultRequestHeaders.Authorization = header; return await client.GetStringAsync(uri); }


Primero tienes que configurar el Authorization Header con tu <clientid> y <clientsecret> .

En lugar de usar StringContent , debe usar FormUrlEncodedContent como se muestra a continuación:

var client = new HttpClient(); client.BaseAddress = new Uri("http://myserver"); var request = new HttpRequestMessage(HttpMethod.Post, "/path"); var byteArray = new UTF8Encoding().GetBytes("<clientid>:<clientsecret>"); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); var formData = new List<KeyValuePair<string, string>>(); formData.Add(new KeyValuePair<string, string>("grant_type", "password")); formData.Add(new KeyValuePair<string, string>("username", "<email>")); formData.Add(new KeyValuePair<string, string>("password", "<password>")); formData.Add(new KeyValuePair<string, string>("scope", "all")); request.Content = new FormUrlEncodedContent(formData); var response = await client.SendAsync(request);