2012-06-28 56 views
1

我在使用REST服務時遇到了一些問題,並想找出我在實現中缺少的內容。Consuming REST Service pb

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

如果我叫使用捲曲這個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的嘗試,Web客戶端雖然看上去沒有什麼工作。

+0

任何錯誤信息傳遞迴給你? –

+0

Hammock和RestSharp沒有反應 – Ali

+0

'HttpStageProcessingException被用戶代碼解除'是Http Web請求的異常 – Ali

回答

1

嘗試手動在HTTP請求中設置授權標頭。

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

收集:https://stackoverflow.com/questions/5595049/servicepointmanager-servercertificatevalidationcallback-question

+0

不工作...我收到此錯誤: 底層連接已關閉:無法建立SSL的信任關係/ TLS安全通道。 – Ali

+0

您是否嘗試覆蓋服務器證書?驗證回調?我已經更新了答案。 –