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