curl命令到C#代码
问题描述:
我有以下的curl命令curl命令到C#代码
curl.exe -k "relevance=value" --user admin:pass https://10.221.22.13:34323/api/query
与此对应,我写了下面的C#代码
private async void RunClient(string _address, string username, string password)
{
HttpClient client = new HttpClient();
string authString = username + ":" + password;
try
{
var byteArray = Encoding.ASCII.GetBytes(authString);
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
string valueString = "value";
client.DefaultRequestHeaders.Add("relevance", valueString);
// Send a request asynchronously and continue when complete
HttpResponseMessage response = await client.GetAsync(_address);
// Check that response was successful or throw exception
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
}
catch(Exception ex)
{
}
}
curl命令工作正常,在cmd中,但C#代码抛出错误的请求(400)错误。
我在哪里错了?
Thnx提前。
答
原来这是一个POST请求和“关联=价值”应该在内容主体,而不是标头中传递,这里是修改后的代码:
private async void RunClient(string _address, string username, string password)
{
// Create an HttpClient instance
HttpClient client = new HttpClient();
string authString = username + ":" + password;
try
{
//add authentication to header
var byteArray = Encoding.ASCII.GetBytes(authString);
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
string valueString = "value";
var con = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("relevance", valueString)
});
// Send a request asynchronously and continue when complete
HttpResponseMessage response = await client.PostAsync(_address, con);
// Check that response was successful or throw exception
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
}
}
什么是你的服务器说它异常收到 – BugFinder
,它显示错误的请求 – Skye
否 - 我问你的网络服务器收到了什么 - 不是你看到的错误是 – BugFinder