2017-04-12 149 views
2

我有一個看起來像這樣的捲曲要求:如何轉換捲曲請求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-binaryFieldName,host=M.233 value=52.666 timestamp從curl轉換爲HttpClient?

+3

爲什麼你不設置'Credentials'屬性,而不是試圖構造認證頭? –

+0

我是C#和HttpClient的新手,所以這就是我在互聯網上的貢獻,並試圖構建自己的其他問題和示例,並試圖瞭解它如何工作以及轉換我的curl請求的正確方法。所以,這只是我的嘗試,我打開所有的建議找到最佳的解決方案。 – Sonja

回答

1

對我來說,解決辦法是:

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); 
} 
+0

你不應該有'async void'。這是一個可怕的想法。讓它返回一個任務。 http://tomasp.net/blog/csharp-async-gotchas.aspx/ – mason

+0

謝謝你的信息。其實我在應用程序中使用了任務,只是忘了在答案中糾正它,因爲我從問題中複製了這部分代碼。現在我糾正了答案。 – Sonja

+0

另外,像這樣創建HttpClient實例可能會很危險。請參閱[您正在使用HttpClient錯誤,它會破壞您的軟件](https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/)。我個人避免使用HttpClient,並發現[RestSharp](http://restsharp.org/)是一個更容易使用的工具。 – mason