2013-07-20 4 views
13

Ich versuche einen lokal gehosteten WCF REST Service über HTTPS mit Basic Auth aufzurufen.RestSharp - Autorisierungsheader, der nicht zum WCF REST Service kommt

Dies funktioniert und der Authorization-Header kommt durch ganz gut und alles ist glücklich:

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(); 
     } 
    } 
} 

Wenn ich versuche jedoch RestSharp zu verwenden, nie die Autorisierungsheader auf Antrag kommt durch:

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); 

Was mache ich falsch mit der RestSharp-Methode?

Ich weiß, dass die AddHeader Methode, weil dies funktioniert:

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

kommen durch, nur „Autorisierung“ scheint gezupft/fehlt.

+0

mit dem gleichen hier, irgendein Glück, das zu lösen? – RollRoll

Antwort

18

stattdessen den Header der Zugabe 'manuell' wie folgt vor:

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

Ich versuchte das auch ohne Glück. –

+0

ok. Sie müssen fiddler verwenden, um zu sehen, was genau serverseitig empfangen wird. – wal

+0

Ich bin mir nicht sicher, ob Sie diesen Schrägstrich in Ihrer 'RestRequest' brauchen - haben Sie das ohne, dh nur leere Zeichenfolge versucht? – wal

4

Sie haben ParameterType.HttpHeader Parameter verwenden:

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

Ich würde das tun, aber als eine Implementierung von IAuthenticator' und dann es zu der 'RestClient'-Instanz hinzufügen. –

6

I milano Antwort verwendet, um meine REST-Service zu erhalten Aufruf zur Arbeit (mit 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 & " **") 

Der Schlüssel war sicherzustellen, dass es ein Leerzeichen hinter dem Wort "Bearer" gab, aber dies kann für jede Art von benutzerdefinierten Token-Autorisierungs-Header

Verwandte Themen