今天就跟大家聊聊有關(guān)HttpClient怎么在.NET Core中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

一、直接使用方式
不管是哪種方式,都要先注冊(cè)服務(wù),對(duì)于 ASP.NET Core 應(yīng)用則是在 Startup.cs 文件的 ConfigureServices 添加如果代碼:
services.AddHttpClient();
然后在 Controller 中通過(guò)構(gòu)造注入的試獲得 IHttpClientFactory,然后通過(guò)它來(lái)創(chuàng)建 HttpClient 對(duì)象。示例代碼:
public class ValuesController : BaseController
{
private readonly IHttpClientFactory _httpClientFactory;
public ValuesController(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
[HttpGet]
public async Task<ActionResult> Get()
{
var client = _httpClientFactory.CreateClient();
client.BaseAddress = new Uri("http://api.github.com");
string result = await client.GetStringAsync("/");
return Ok(result);
}
}這種使用方式適合一次性的 HTTP 請(qǐng)求調(diào)用,弊端是如果多次都要請(qǐng)求 github 的接口,那就得寫(xiě)很多重復(fù)代碼配置 HttpClient。
二、命名式使用方式
命名式的使用方式可以解決第一種方式的問(wèn)題,對(duì)于特定域名的 HTTP 調(diào)用,可以只做一次配置,然后在多個(gè)地方通過(guò)名稱(chēng)拿到相同的 Client 來(lái)使用。
首先在 Startup.cs 注冊(cè)服務(wù)的地方添加帶有特定名稱(chēng)的 HttpClient 服務(wù),并添加需要的配置,如下示例:
services.AddHttpClient();
services.AddHttpClient("github", c =>
{
c.BaseAddress = new Uri("https://api.github.com/");
c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
});注意這里添加了兩次 AddHttpClient,一次是沒(méi)有命名的,一次是有命名的。在 Controller 中的使用方式是:
public class ValuesController : BaseController
{
private readonly IHttpClientFactory _httpClientFactory;
public ValuesController(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
[HttpGet]
public async Task<ActionResult> Get()
{
var client = _httpClientFactory.CreateClient("github");
string result = await client.GetStringAsync("/");
return Ok(result);
}
}但如果使用很頻繁,這種獲取 Client 的方式還是有一點(diǎn)麻煩。下面介紹第三種方式,可以在使用的時(shí)候方便一點(diǎn),但配置要麻煩些。
三、類(lèi)型化使用方式
類(lèi)型化的使用方式可以預(yù)先把配置放到自定義的 HttpClient 中,然后在需要的地方都過(guò)依賴(lài)注入直接拿到 HttpClient 實(shí)例。
我們來(lái)看具體的例子,首先自定義一個(gè) HttClient 類(lèi),比如訪(fǎng)問(wèn) github 接口的類(lèi)可以這樣定義:
public class GitHubClient
{
public HttpClient Client { get; private set; }
public GitHubClient(HttpClient httpClient)
{
httpClient.BaseAddress = new Uri("https://api.github.com/");
httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
httpClient.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
Client = httpClient;
}
public async Task<string> GetData()
{
return await _client.GetStringAsync("/");
}
}這里的 GetData 就是額外擴(kuò)展的共用方法。使用前需要為這個(gè)類(lèi)注冊(cè)服務(wù):
services.AddHttpClient<GitHubClient>();
然后在需要的地方(比如 Controller)中這樣使用:
public class ValuesController : BaseController
{
private readonly GitHubClient _gitHubClient;;
public ValuesController(GitHubClient gitHubClient)
{
_gitHubClient = gitHubClient;
}
[HttpGet]
public async Task<ActionResult> Get()
{
string result = await _gitHubClient.GetData();
return Ok(result);
}
}類(lèi)型化的方式和命名式的方式相比,雖然在配置的時(shí)候會(huì)麻煩一點(diǎn),但它有兩個(gè)好處:一是不用通過(guò)名稱(chēng)字符串來(lái)獲得 Client,而是直接通過(guò)依賴(lài)注入獲得具體的 Client;二是可以在自定義的 HttpClient 類(lèi)中擴(kuò)展共用的方法。
看完上述內(nèi)容,你們對(duì)HttpClient怎么在.NET Core中使用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
新聞名稱(chēng):HttpClient怎么在.NETCore中使用-創(chuàng)新互聯(lián)
文章URL:http://www.chinadenli.net/article14/djhgde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站設(shè)計(jì)、微信公眾號(hào)、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容