在ASP.NET Core顶用HttpClient发送POST, PUT和DELETE请求(2)

在修改客户端项目之前,我们只想提一下,Web API的UpdateCompany操纵返回了一个NoContent响应。因此,在客户端上不需要反序列化任何内容,只有一个204状态码。

也就是说,我们已经筹备亏得HttpClientCrudService 类中添加一个新要领:​​​​​​​

private async Task UpdateCompany() { var updatedCompany = new CompanyForUpdateDto { Name = "Eagle IT Ltd.", Country = "USA", Address = "Eagle IT Street 289 Updated" }; var company = JsonSerializer.Serialize(updatedCompany); var requestContent = new StringContent(company, Encoding.UTF8, "application/json"); var uri = Path.Combine("companies", "fc12c11e-33a3-45e2-f11e-08d8bdb38ded"); var response = await _httpClient.PutAsync(uri, requestContent); response.EnsureSuccessStatusCode(); }

在这个要领中,我们建设一个新的updatedCompany工具,该工具具有修改后的Address属性。然后,就像我们在CreateCompany要领中所做的那样,序列化工具并建设一个新的StringContent。在此之后,我们在节制器建设更新数据的action。一旦这样做了,我们将利用PutAsync快捷要领发送PUT请求,并确保吸收到一个乐成的状态码。在本例中是204 - NoContent状态码。

有了这些,我们可以修改Execute要领:​​​​​​​

public async Task Execute() { ... await UpdateCompany(); }

此刻,让我们在UpdateCompany要领中安排一个断点,并启动应用措施:

在ASP.NET Core中用HttpClient发送POST, PUT和DELETE请求

同样,假如我们查抄我们的数据库:

在ASP.NET Core中用HttpClient发送POST, PUT和DELETE请求

此刻可以确认我们数据更新乐成了。

利用HttpRequestMessage类发送PUT请求

正如我们已经说过的,利用HttpRequestMessage类可以让我们更好地节制请求。所以,让我们看看如何操作它来发送PUT请求:​​​​​​​

private async Task UpdateCompanyWithHttpRequestMessage() { var updatedCompany = new CompanyForCreationDto { Name = "Hawk IT Ltd.", Country = "USA", Address = "Hawk IT Street 365 Updated" }; var company = JsonSerializer.Serialize(updatedCompany); var uri = Path.Combine("companies", "29bc0429-eb4d-4eeb-f11d-08d8bdb38ded"); var request = new HttpRequestMessage(HttpMethod.Put, uri); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); request.Content = new StringContent(company, Encoding.UTF8); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var response = await _httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); }

当我们查察这个要领时,可以看到它的实现与CreateCompanyWithHttpRequestMessage要领险些沟通。虽然,这里我们建设了一个特另外uri参数,而且我们没有反序列化响应正文内容,因为它是空的。

在要领实现之后,让我们从Execute要领中挪用它:​​​​​​​

public async Task Execute() { ... await UpdateCompanyWithHttpRequestMessage(); }

让我们启动应用措施:

在ASP.NET Core中用HttpClient发送POST, PUT和DELETE请求

乐成了。假如不安心也可以查抄一下数据库。

利用HttpClient发送DELETE请求

由于DELETE请求是前面所有请求中最简朴的,所以我们只展示代码。所以,让我们首先看看如何发送一个带有快捷方法DeleteAsync要领的DELETE请求:​​​​​​​

private async Task DeleteCompany() { var uri = Path.Combine("companies", "fc12c11e-33a3-45e2-f11e-08d8bdb38ded"); var response = await _httpClient.DeleteAsync(uri); response.EnsureSuccessStatusCode(); }

同样,让我们从Execute要领中挪用这个要领:​​​​​​​

public async Task Execute() { ... await DeleteCompany(); }

一旦我们运行客户端应用措施,我们就会获得204响应。这是Web API中DELETE操纵的有效响应。

此刻,让我们看看如何利用HttpRequestMessage类来做同样的工作:​​​​​​​

private async Task DeleteCompanyWithHttpResponseMessage() { var uri = Path.Combine("companies", "29bc0429-eb4d-4eeb-f11d-08d8bdb38ded"); var request = new HttpRequestMessage(HttpMethod.Delete, uri); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = await _httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); }

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

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