web-dev-qa-db-ja.com

RestSharp-認証ヘッダーがWCFに到達しないRESTサービス

ローカルでホストされているWCFを呼び出そうとしていますREST基本認証を使用するHTTPS経由のサービス。

これは機能し、Authorizationヘッダーは問題なく通過し、すべて満足しています。

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

「承認」のみが取り除かれている/欠落しているようです。

20
Chris Hawkins

ヘッダーを「手動で」追加する代わりに、以下を実行します。

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

私は自分のRESTサービスコールを機能させるためにmilanoの回答を使用しました(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 & " **")

キーは、単語「ベアラー」の後にスペースがあることを確認することでしたが、これは任意のタイプのカスタムトークン認証ヘッダーに適用される場合があります

9
j.hull

ParameterType.HttpHeaderパラメータを使用する必要があります。

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