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

Chr*_*ins 18 c# rest restful-authentication restsharp

我试图通过基于身份验证的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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用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);
Run Code Online (Sandbox Code Playgroud)

我在RestSharp方法上做错了什么?

我知道AddHeader方法有效,因为:

restRq.AddHeader("Rum", "And Coke");
Run Code Online (Sandbox Code Playgroud)

将来,只有"授权"似乎被删除/缺失.

wal*_*wal 23

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

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


j.h*_*ull 9

我使用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 & " **")
Run Code Online (Sandbox Code Playgroud)

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


mil*_*ler 6

您必须使用ParameterType.HttpHeader参数:

request.AddParameter("Authorization", "data", ParameterType.HttpHeader);
Run Code Online (Sandbox Code Playgroud)