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

上一篇文章中,我们已经进修了如安在ASP.NET Core中利用HttpClient从Web API获取数据。另外,我们还进修了如何利用GetAsync要领和HttpRequestMessage类发送GET请求。在本文中,我们将进修如安在ASP.NET Core中利用HttpClient发送POST、PUT和DELETE请求,并利用PostAsync、PutAsync、DeleteAsync和HttpRequestMessage类建设请求。

在ASP.NET Core中利用HttpClient发送POST请求

假如读过上一篇文章,就知道在CompanyEmployees.Client中有一个HttpClientCrudService 类。这个类已经包括了两个要领,我们将在本文中对它举办扩展。

既然设置已经筹备好了,我们可以添加一个新要领来发送POST请求到Web API:

private async Task CreateCompany() { var companyForCreation = new CompanyForCreationDto { Name = "Eagle IT Ltd.", Country = "USA", Address = "Eagle IT Street 289" }; var company = JsonSerializer.Serialize(companyForCreation); var requestContent = new StringContent(company, Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync("companies", requestContent); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); var createdCompany = JsonSerializer.Deserialize<CompanyDto>(content, _options); }

我们首先筹备一个想要建设的company工具,并利用serialize要领对其举办序列化。然后,建设一个新的StringContent工具,提供序列化所需的数据及参数。之后,我们利用PostAsync要领将POST请求发送到API。在收到响应之后,我们查抄它是否乐成。然后,通过利用ReadAsStringAsync要领读取内容并利用JsonSerializerOptions参数对内容举办反序列化(来自上一篇文章)。请记着我们在上一篇文章中建设的_options参数。

此时,我们必需确保客户端应用措施挪用这个要领。然后修改Execute要领:

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

此刻,假如我们在CreateCompany要领中安排一个断点,并启动两个应用措施:

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

我们可以看到功效。假如你愿意,还也可以查一下数据库。

利用HttpRequestMessage发送POST请求

PostAsync要领是一个快捷要领,因为它封装了HttpRequestMessage类。正如我们所见,它很是好用。可是,假如我们想对请求有更大的节制,并显式地配置差异的请求选项,如header,我们必需利用HttpRequestMessage类。那么,让我们看看如何做到这一点:​​​​​​​

private async Task CreateCompanyWithHttpRequestMessage() { var companyForCreation = new CompanyForCreationDto { Name = "Hawk IT Ltd.", Country = "USA", Address = "Hawk IT Street 365" }; var company = JsonSerializer.Serialize(companyForCreation); var request = new HttpRequestMessage(HttpMethod.Post, "companies"); 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(); var content = await response.Content.ReadAsStringAsync(); var createdCompany = JsonSerializer.Deserialize<CompanyDto>(content, _options); }

同样,我们从建设companyForCreation工具及其序列化开始。然后,我们在建设一个HttpRequestMessage工具,并提供请求范例和地点。在此之后,我们添加一个accept头,以确定我们支持哪种名目作为响应。紧接着,我们利用StringContent类并提供序列化数据工具和编码范例来填充请求。同样,我们用ContentType属性指定请求的媒体范例。

我们也可以在StringContent类的结构函数中设置ContentType,可是有了这个实现,就更容易领略进程。

为了发送请求,我们利用SendAsync要领。在确定返回乐成的状态码之后,我们读取内容并反序列化它。

此刻,我们可以修改Execute要领:​​​​​​​

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

在我们的新要领中安排一个断点,然后启动我们的客户端应用:

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

可以看到,数据乐成建设了。同样,假如查抄响应,我们会发明201:

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

在ASP.NET Core中利用HttpClient发送一个PUT请求

就像处理惩罚POST请求一样,我们将首先利用快捷要领,然后展示如何利用HttpRequestMessage类做同样的工作。

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

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