在ASP.NET Core中应用HttpClient获取数据和内容(3)

我们已经看到了如安在请求中向HTTP Accept头添加首选项。但此刻问题呈现了。假如我们利用部门请求头,该怎么办?

利用HttpRequestMessage类发送HTTP请求

在这个实现中,我们对每个请求利用沟通的头设置。因此,假如想发送默认为JSON名目标HTTP请求,我们不能利用这个类中的HTTP设置来实现。这是因为我们将XML名目配置为默认名目。这意味着我们必需提供一个差异的办理方案。

假如我们仔细思量这一点,我们可以得出结论:BaseAddress和Timeout属性与HttpClient相关,但Accept头的属性毗连到请求自己。同样,当我们利用GetAsync要领时,它在内部利用GET HTTP要领建设了一个新的HttpRequestMessage。也就是说,我们可以建设本身的HttpRequestMessage并为该请求提供报头。

最佳实践是在HttpClient实例上配置默认设置,在HTTP请求自己上配置请求设置。虽然,假如我们老是但愿利用JSON名目作为Accept报头,我们可以在HttpClient配置它。

实现

此刻,让我们看看如何利用HttpRequestMessage类来实现HTTP请求。

首先,让我们从结构函数中移除accept头文件的设置:

public HttpClientCrudService() { _httpClient.BaseAddress = new Uri("https://localhost:5001/api/"); _httpClient.Timeout = new TimeSpan(0, 0, 30); _httpClient.DefaultRequestHeaders.Clear(); _options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; }

然后,我们可以将GetCompanies要领规复到之前:

public async Task GetCompanies() { var response = await _httpClient.GetAsync("companies"); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); var companies = JsonSerializer.Deserialize<List<CompanyDto>>(content, _options); }

最后,我们可以添加新要领:

public async Task GetCompaniesWithXMLHeader() { var request = new HttpRequestMessage(HttpMethod.Get, "companies"); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml")); var response = await _httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); var doc = XDocument.Parse(content); foreach (var element in doc.Descendants()) { element.Attributes().Where(a => a.IsNamespaceDeclaration).Remove(); element.Name = element.Name.LocalName; } var serializer = new XmlSerializer(typeof(List<CompanyDto>)); var companies = (List<CompanyDto>)serializer.Deserialize(new StringReader(doc.ToString())); }

因此,我们利用HttpRequestMessage类建设了一个新请求,该类提供了HTTP Method作为参数和API的地点。然后,向请求添加报头,并挪用SendAsync要领发送请求。提取内容之后,反复前面要领中所做的步调。我们还要做最后一件事。

让我们确保一旦客户端应用措施启动,这个要领就会被挪用:

public async Task Execute(){ //await GetCompanies(); await GetCompaniesWithXMLHeader();}

正如我们之前所做的,我们将在这个要领中安排一个断点并启动两个应用措施:

在ASP.NET Core中应用HttpClient获取数据和内容

如你所见,我们获得的功效与前面沟通,但这次我们利用HttpRequestMessage的单独要领发送带有XML Accept头的HTTP请求。

结论

在本文中,我们接头了HttpClient,以及如安在我们的ASP.NET Core中利用它处理惩罚来自Web API的数据。

原文链接:https://code-maze.com/fetching-data-with-httpclient-in-aspnetcore/

以上就是在ASP.NET Core中集成和利用HttpClient获取数据和内容的具体内容,更多关于ASP.NET Core中集成和利用HttpClient的资料请存眷剧本之家其它相关文章!

您大概感乐趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsjfyj.html