本文內(nèi)容
- 創(chuàng)建 HttpClient
- 發(fā)出 HTTP 請(qǐng)求
- 處理 HTTP 響應(yīng)
- HTTP 錯(cuò)誤處理
- HTTP 代理
本文介紹如何使用?HttpClient
?類發(fā)出 HTTP 請(qǐng)求和處理響應(yīng)。
?重要
所有示例 HTTP 請(qǐng)求都以下面 URL 之一為目標(biāo):
- https://jsonplaceholder.typicode.com:用于測(cè)試和原型設(shè)計(jì)的免費(fèi)虛設(shè) API。
- https://www.example.com:此域用于文檔中的說明性示例。
HTTP 終結(jié)點(diǎn)通常返回 JavaScript 對(duì)象表示法 (JSON) 數(shù)據(jù),但并不總是如此。 為方便起見,可選的?System.Net.Http.Json?NuGet 包為使用?System.Text.Json
?執(zhí)行自動(dòng)序列化和反序列化的?HttpClient
?和?HttpContent
?提供多個(gè)擴(kuò)展方法。 下面的示例提醒人們注意這些擴(kuò)展的可用位置。
1、創(chuàng)建?HttpClient
下面的大多數(shù)示例都重復(fù)使用同一?HttpClient
?實(shí)例,因此只需配置一次。 要?jiǎng)?chuàng)建?HttpClient
,請(qǐng)使用?HttpClient
?類構(gòu)造函數(shù)。?
// HttpClient lifecycle management best practices:
// https://learn.microsoft.com/dotnet/fundamentals/networking/http/httpclient-guidelines#recommended-use
private static HttpClient sharedClient = new()
{
BaseAddress = new Uri("https://jsonplaceholder.typicode.com"),
};
前面的代碼:
- 實(shí)例化新的?
HttpClient
?實(shí)例作為?static
?變量。 根據(jù)準(zhǔn)則,建議在應(yīng)用程序的生命周期內(nèi)重復(fù)使用?HttpClient
?實(shí)例。 - 將?HttpClient.BaseAddress?設(shè)置為?
"https://jsonplaceholder.typicode.com"
。
發(fā)出后續(xù)請(qǐng)求時(shí),此?HttpClient
?實(shí)例將使用基址。 若要應(yīng)用其他配置,請(qǐng)考慮:
- 設(shè)置?HttpClient.DefaultRequestHeaders。
- 應(yīng)用非默認(rèn)?HttpClient.Timeout。
- 指定?HttpClient.DefaultRequestVersion。
?提示
或者,可使用工廠模式方法創(chuàng)建?HttpClient
?實(shí)例,該方法允許配置任意數(shù)量的客戶端并將它們用作依賴關(guān)系注入服務(wù)。?
2、發(fā)出 HTTP 請(qǐng)求
要發(fā)出 HTTP 請(qǐng)求,請(qǐng)調(diào)用以下任一 API:
HTTP 方法 | API |
---|---|
GET |
HttpClient.GetAsync |
GET |
HttpClient.GetByteArrayAsync |
GET |
HttpClient.GetStreamAsync |
GET |
HttpClient.GetStringAsync |
POST |
HttpClient.PostAsync |
PUT |
HttpClient.PutAsync |
PATCH |
HttpClient.PatchAsync |
DELETE |
HttpClient.DeleteAsync |
?USER SPECIFIED
|
HttpClient.SendAsync |
?
USER SPECIFIED
?請(qǐng)求指示?SendAsync
?方法接受任何有效的?HttpMethod。
?警告
發(fā)出 HTTP 請(qǐng)求被視為是與網(wǎng)絡(luò) I/O 相關(guān)的工作。 雖然有同步?HttpClient.Send?方法,但建議改用異步 API,除非有充分的理由不這樣做。
2.1 HTTP 內(nèi)容
HttpContent?類型用于表示 HTTP 實(shí)體正文和相應(yīng)的內(nèi)容標(biāo)頭。 對(duì)于需要正文的 HTTP 方法(或請(qǐng)求方法)POST
、PUT
?和?PATCH
,可使用?HttpContent?類來指定請(qǐng)求的正文。 大多數(shù)示例演示如何使用 JSON 有效負(fù)載準(zhǔn)備?StringContent?子類,但還有針對(duì)其他內(nèi)容 (MIME) 類型的其他子類。文章來源:http://www.zghlxwxcb.cn/news/detail-761401.html
- ByteArrayContent:提供基于字節(jié)數(shù)組的 HTTP 內(nèi)容。
-
FormUrlEncodedContent:為使用?
"application/x-www-form-urlencoded"
?MIME 類型編碼的名稱/值元組提供 HTTP 內(nèi)容。 - JsonContent:提供基于 JSON 的 HTTP 內(nèi)容。
-
MultipartContent:提供使用?
"multipart/*"
?MIME 類型規(guī)范進(jìn)行序列化的 HttpContent 對(duì)象的集合。 -
MultipartFormDataContent:為使用?
"multipart/form-data"
?MIME 類型進(jìn)行編碼的內(nèi)容提供容器。 - ReadOnlyMemoryContent:提供基于?ReadOnlyMemory<T>?的 HTTP 內(nèi)容。
- StreamContent:提供基于流的 HTTP 內(nèi)容。
- StringContent:提供基于字符串的 HTTP 內(nèi)容。
HttpContent
?類還用于表示?HttpResponseMessage?的響應(yīng)正文,可通過?文章來源地址http://www.zghlxwxcb.cn/news/detail-761401.html
到了這里,關(guān)于【微軟技術(shù)棧】C#.NET 使用 HttpClient 類發(fā)出 HTTP 請(qǐng)求的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!