Son*_*nja 5 .net c# curl dotnet-httpclient asynchttpclient
我有一个如下所示的卷曲请求:
curl -i -XPOST 'http://my_url:port/write?db=myDb' -u user:xxxxx --data-binary 'FieldName,host=M.233 value=52.666 timestamp'
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 HttpClient 发布此请求。我不确定应该如何称呼它。这就是我试图做的:
public async void TestHttpClient()
{
var client = new HttpClient();
var credentials = Encoding.ASCII.GetBytes("user:xxxxx");
var header = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));
client.DefaultRequestHeaders.Authorization = header;
client.BaseAddress = new Uri("http://my_url:port/write?db=myDb");
var result = await client.PostAsync(..);
}
Run Code Online (Sandbox Code Playgroud)
我应该为 PostAsync() 编写哪些参数?
如何从curl 转换--data-binary为FieldName,host=M.233 value=52.666 timestampHttpClient?
有一个可爱的curl 到c# 转换器,它将使用HTTPClient 将您的curl 脚本转换为C# 代码。https://curl.olsh.me/
使用这个工具和你的curl脚本我们得到以下结果。
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("POST"), "http://http//my_url:port/write?db=myDb"))
{
var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("user:xxxxx"));
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
request.Content = new StringContent("FieldName,host=M.233 value=52.666 timestamp");
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
var response = await httpClient.SendAsync(request);
}
}Run Code Online (Sandbox Code Playgroud)
我的解决方案是:
public async Task TestHttpClient()
{
var client = new HttpClient();
var credentials = Encoding.ASCII.GetBytes("user:xxxxx");
var header = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));
client.DefaultRequestHeaders.Authorization = header;
String url = "http://my_url:port/write?db=myDb";
String content = "FieldName,host=M.233 value=52.666 timestamp";
StringContent stringContent = new StringContent(content);
var result = await client.PostAsync(url, stringContent);
}
Run Code Online (Sandbox Code Playgroud)