如何转换卷曲请求HttpClient的
我有一个看起来像这样的卷曲要求:如何转换卷曲请求HttpClient的
curl -i -XPOST 'http://my_url:port/write?db=myDb' -u user:xxxxx --data-binary 'FieldName,host=M.233 value=52.666 timestamp'
我试图使用后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(..);
}
我应该为PostAsync()编写哪些参数?
如何将--data-binary
和FieldName,host=M.233 value=52.666 timestamp
从curl转换为HttpClient?
对我来说,解决办法是:
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);
}
你不应该有'async void'。这是一个可怕的想法。让它返回一个任务。 http://tomasp.net/blog/csharp-async-gotchas.aspx/ – mason
谢谢你的信息。其实我在应用程序中使用了任务,只是忘了在答案中纠正它,因为我从问题中复制了这部分代码。现在我纠正了答案。 – Sonja
另外,像这样创建HttpClient实例可能会很危险。请参阅[您正在使用HttpClient错误,它会破坏您的软件](https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/)。我个人避免使用HttpClient,并发现[RestSharp](http://restsharp.org/)是一个更容易使用的工具。 – mason
为什么你不设置'Credentials'属性,而不是试图构造认证头? –
我是C#和HttpClient的新手,所以这就是我在互联网上的贡献,并试图构建自己的其他问题和示例,并试图了解它如何工作以及转换我的curl请求的正确方法。所以,这只是我的尝试,我打开所有的建议找到最佳的解决方案。 – Sonja