2013-07-20 41 views
13

我正嘗試通過基本身份驗證通過HTTPS調用本地託管的WCF REST服務。RestSharp - 授權標題未出現在WCF REST服務

這工作,並授權頭自帶通就好了,一切都開心:

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

當我嘗試但是使用RestSharp,授權頭永遠不會到來直通的要求:

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

我在做什麼錯誤的RestSharp方法?

我知道的AddHeader方法有效,因爲這樣的:

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

會通,只有「授權」似乎剝離出/失蹤。

+0

在這裏有相同的,有沒有什麼運氣可以解決這個問題? – RollRoll

回答

18

而不是添加標題 '手動' 做如下:

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

我嘗試過,沒有運氣。 –

+0

好的。你需要使用提琴手來看看究竟是什麼收到服務器端 – wal

+0

我不確定你需要在你的'RestRequest'的正斜槓 - 你試過沒有,即只是空字符串? – wal

4

你必須使用ParameterType.HttpHeader參數:

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

我會這樣做,但作爲'IAuthenticator'的實現,然後將其添加到'RestClient'實例。 –

6

我用米蘭的回答讓我的REST服務致電工作(使用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 & " **") 

關鍵是確保在「承載者」這個詞後面有一個空格,但這可能適用於任何類型的自定義令牌授權標頭