RestSharp – 授权标头未涉及WCF REST服务

我试图通过基本身份validation通过HTTPS调用本地托管的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时,Authorization标头永远不会通过请求:

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

将来,只有“授权”似乎被剥夺/失踪。

而不是“手动”添加标题执行以下操作:

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

我使用milano的答案让我的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 & " **") 

关键是确保“承载”一词后面有空格,但这可能适用于任何类型的自定义令牌授权标题

您必须使用ParameterType.HttpHeader参数:

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