如何使用RestSharp客户端连接到Ambari的Swagger界面?
此代码有效并返回预期的json:
HttpClientHandler handler = new HttpClientHandler
{
Credentials = new System.Net.NetworkCredential("xxx", "yyyyy")
};
using (var httpClient = new HttpClient(handler))
{
var activationUrl = "https://aaaa.azurehdinsight.net";
var uri = new Uri(activationUrl + "/api/v1/users");
var response = await httpClient.GetAsync(uri);
Assert.IsTrue(response.IsSuccessStatusCode);
var result = await response.Content.ReadAsStringAsync();
}
此代码无效,并返回406 NotAcceptable:
var client = new RestSharp.RestClient("https://aaaa.azurehdinsight.net/api/v1/");
var credentials = new System.Net.NetworkCredential("xxx", "yyyy");
client.Authenticator = new NtlmAuthenticator(credentials);
client.DefaultParameters.Clear();
var request = new RestSharp.RestRequest("users", RestSharp.Method.GET);
var response = await client.ExecuteAsync<string>(request);
如果我调整密码,它将返回未授权,所以我知道我正在认证。 我认为诀窍将是使RestSharp属性像HttpClient一样。 这就是为什么我通过以下方式删除标题:
client.DefaultParameters.Clear();
答案 0 :(得分:0)
我发现它可以与RestSharp一起使用:
var client = new RestSharp.RestClient("https://xxxx.azurehdinsight.net/api/v1/");
var credentials = new System.Net.NetworkCredential("yyyy", "ZZZZzzzz");
client.Authenticator = new NtlmAuthenticator(credentials);
//must pass this header
client.DefaultParameters.Add(new RestSharp.Parameter("X-Requested-By", "my_computer_name", RestSharp.ParameterType.HttpHeader));
var request = new RestSharp.RestRequest("users", RestSharp.Method.GET);
//Accept Header cannot be passed
// "{Accept=application/json, text/json, text/x-json, text/javascript, application/xml, text/xml}"
request.OnBeforeRequest = (http) =>
{
Debug.WriteLine(http.Headers.Count());
var header = http.Headers.Where(h => h.Name == "Accept");
http.Headers.Remove(header.First());
Debug.WriteLine(http.Headers.Count());
};
request.RequestFormat = RestSharp.DataFormat.Json;
var response = await client.ExecuteAsync<string>(request);
Assert.IsTrue(response.StatusCode == System.Net.HttpStatusCode.OK);
其他经验教训: