1

REST サービスの使用に問題があり、実装に欠けているものを見つけたいと考えています。

https://<server-name-or-address>/api/sessions

cURL を使用してこの REST API を呼び出すと、次のスクリプトで問題なく動作します

curl -i -k -H "Accept:application/*+xml;version=1.5" -u username:password -X POST https://<server-name-or-address>/api/sessions

ただし、C# asp.net ではまったく機能しません。ここで何が欠けているのかわかりません。これが私の試みです:

1) HTTP Web リクエストの使用

Uri address = new Uri(url);
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
request.Method = "POST";
request.Accept = "application/*+xml;version=1.5";

request.Credentials = new NetworkCredential(username,password);

HttpWebResponse response = request.GetResponse() as HttpWebResponse;

// 前述のステートメントを呼び出すと、次の例外が発生します 基礎となる接続が閉じられました: SSL/TLS セキュア チャネルの信頼関係を確立できませんでした。

2) Hammock.net の使用

Hammock.RestClient client = new Hammock.RestClient();
string encodedAPIKey = Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:{1}", username, password)));
client.AddHeader("Accept", "application/*+xml;version=1.5");
client.AddHeader("Authorization", "Basic " + username + ":" + password);
client.Authority = url;
Hammock.RestRequest req = new Hammock.RestRequest();
req.Path = url;
Hammock.RestResponse response = client.Request(req);
string _result = client.Request(req).Content; // exception

3) RestSharp の使用

string _loginInfo = Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:{1}", username, password)));
RestSharp.RestClient client = new RestSharp.RestClient();
client.AddDefaultHeader("Accept", "application/*+xml;version=1.5");
client.AddDefaultHeader("Authorization", "Basic " + _loginInfo);
client.BaseUrl = url;
RestSharp.RestRequest request = new RestSharp.RestRequest();
request.AddUrlSegment("method", "POST");
request.AddUrlSegment("uri", url);
string result = client.Execute(request).Content;

HttpClient、WebRequest、WebClient も試してみましたが、何も機能していないようです。

4

1 に答える 1

1

HTTP 要求で Authorization ヘッダーを自分で手動で設定してみてください。

string credentials = String.Format("{0}:{1}", username, password);
byte[] bytes = Encoding.ASCII.GetBytes(credentials);
string base64 = Convert.ToBase64String(bytes);
string authorization = String.Concat("Basic ", base64);
request.Headers.Add("Authorization", authorization);

編集:

自己署名、期限切れ、またはその他の無効な証明書が原因である可能性があります。以下を試してください

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

このSOから収集: https://stackoverflow.com/questions/5595049/servicepointmanager-servercertificatevalidationcallback-question

于 2012-06-28T20:14:57.400 に答える