首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用REST服务pb

使用REST服务pb
EN

Stack Overflow用户
提问于 2012-06-29 03:23:18
回答 1查看 1.7K关注 0票数 1

我在使用REST服务时遇到了一些问题,我想弄清楚我在实现中遗漏了什么。

代码语言:javascript
复制
https://<server-name-or-address>/api/sessions

如果我使用cURL调用此rest api,则只需遵循以下脚本即可正常工作

代码语言:javascript
复制
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请求

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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,但似乎都不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-29 04:14:57

尝试在HTTP请求中手动设置Authorization标头。

代码语言:javascript
复制
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);

编辑:

看起来可能是由于自签名证书、过期证书或其他无效证书造成的。请尝试以下操作

代码语言:javascript
复制
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

从这里收集到的信息:https://stackoverflow.com/questions/5595049/servicepointmanager-servercertificatevalidationcallback-question

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11251489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档