在C#中,HttpClient
?類是一個(gè)非常強(qiáng)大的工具,用于在應(yīng)用程序中發(fā)送HTTP請(qǐng)求和接收HTTP響應(yīng)。它支持多種數(shù)據(jù)格式,這些格式主要通過請(qǐng)求的Content
屬性和響應(yīng)的Content
屬性來處理。下面是一些HttpClient
支持的主要數(shù)據(jù)格式及其處理方式:
1、文本(如JSON, XML, 純文本)
發(fā)送:使用StringContent
,MultipartFormDataContent
(如果發(fā)送表單數(shù)據(jù))或HttpContent
的子類(如PushStreamContent
)包裝文本數(shù)據(jù)。
示例:發(fā)送JSON數(shù)據(jù),可以使用StringContent
,并通過設(shè)置Content-Type
為application/json
來指示內(nèi)容類型。
var json = JsonConvert.SerializeObject(yourObject);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("http://example.com/api/resource", content);
2、表單數(shù)據(jù)
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("key1", "value1"),
new KeyValuePair<string, string>("key2", "value2")
});
var response = await httpClient.PostAsync("http://example.com/api/resource", content);
3、二進(jìn)制數(shù)據(jù)(如文件)
var fileContent = new ByteArrayContent(File.ReadAllBytes("path_to_file"));
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "\"file\"",
FileName = "\"filename.txt\""
};
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("text/plain");
var content = new MultipartFormDataContent();
content.Add(fileContent, "file", "filename.txt");
var response = await httpClient.PostAsync("http://example.com/api/upload", content);
4、接收響應(yīng)
文本:使用ReadAsStringAsync
方法將響應(yīng)體讀取為字符串。
二進(jìn)制:使用ReadAsByteArrayAsync
方法將響應(yīng)體讀取為字節(jié)數(shù)組,或者使用ReadAsStreamAsync
獲取響應(yīng)的流,以便進(jìn)一步處理(如保存到文件)。
自動(dòng)反序列化:對(duì)于JSON等格式的響應(yīng),可以使用如JsonConvert.DeserializeObject<T>
(來自Newtonsoft.Json或System.Text.Json)的方法將響應(yīng)字符串反序列化為C#對(duì)象。
每種數(shù)據(jù)格式的選擇取決于你的具體需求,包括你需要發(fā)送的數(shù)據(jù)類型、接收數(shù)據(jù)的客戶端或服務(wù)器的期望格式等。HttpClient
通過其靈活的API支持多種數(shù)據(jù)格式,使得在C#應(yīng)用程序中發(fā)送和接收HTTP請(qǐng)求變得簡(jiǎn)單而強(qiáng)大。
該文章在 2024/9/4 17:33:50 編輯過