restclient example deserialize consumir consume c# rest restsharp restful-authentication

c# - example - RestSharp: el encabezado de autorización no llega al servicio REST de WCF



restsharp nuget (3)

Estoy tratando de llamar a un servicio WCF REST alojado localmente a través de HTTPS con autenticación básica.

Esto funciona y el encabezado de Autorización viene bien y todo está contento:

ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertficate; var request = (HttpWebRequest)WebRequest.Create("https://localhost/MyService/MyService.svc/"); request.Method = "GET"; request.ContentType = "application/json"; request.Headers.Add( System.Net.HttpRequestHeader.Authorization, "Basic " + this.EncodeBasicAuthenticationCredentials("UserA", "123")); WebResponse webResponse = request.GetResponse(); using (Stream webStream = webResponse.GetResponseStream()) { if (webStream != null) { using (StreamReader responseReader = new StreamReader(webStream)) { string response = responseReader.ReadToEnd(); } } }

Sin embargo, cuando intento usar RestSharp, el encabezado de Autorización nunca aparece en la solicitud:

ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertficate; var credentials = this.EncodeBasicAuthenticationCredentials("UserA", "123"); var client = new RestSharp.RestClient("https://localhost/MyService/MyService.svc/"); var restRq = new RestSharp.RestRequest("/"); restRq.Method = Method.GET; restRq.RootElement = "/"; restRq.AddHeader("Authorization", "Basic " + credentials); var restRs = client.Execute(restRq);

¿Qué estoy haciendo mal con el método RestSharp?

Sé que el método AddHeader funciona porque esto:

restRq.AddHeader("Rum", "And Coke");

vendrá a través, solo la "Autorización" parece despojada / desaparecida.


En lugar de agregar el encabezado ''manualmente'', haga lo siguiente:

var client = new RestSharp.RestClient("https://localhost/MyService/MyService.svc/"); client.Authenticator = new HttpBasicAuthenticator("UserA", "123");


Tienes que usar el parámetro ParameterType.HttpHeader :

request.AddParameter("Authorization", "data", ParameterType.HttpHeader);


Usé la respuesta de milano para hacer que mi llamada de servicio REST funcionara (usando GET)

Dim client2 As RestClient = New RestClient("https://api.clever.com") Dim request2 As RestRequest = New RestRequest("me", Method.GET) request2.AddParameter("Authorization", "Bearer " & j.access_token, ParameterType.HttpHeader) Dim response2 As IRestResponse = client2.Execute(request2) Response.Write("** " & response2.StatusCode & "|" & response2.Content & " **")

La clave era asegurarse de que había un espacio después de la palabra "Portador", pero esto puede aplicarse a cualquier tipo de encabezado de autorización de token personalizado