在ASP.NET Core中用HttpClient发送POST, PUT和DELETE请求
 更新时间:2021年03月11日 11:05:50   作者:码农译站  

这篇文章主要介绍了在ASP.NET Core中用HttpClient发送POST, PUT和DELETE请求的方法,帮助大家更好的理解和学习使用ASP.NET Core,感兴趣的朋友可以了解下

目录在ASP.NET Core中使用HttpClient发送POST请求使用HttpRequestMessage发送POST请求在ASP.NET Core中使用HttpClient发送一个PUT请求使用HttpRequestMessage类发送PUT请求使用HttpClient发送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方法中放置一个断点,并启动两个应用程序:

我们可以看到结果。如果你愿意,还也可以查一下数据库。
使用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();
}

在我们的新方法中放置一个断点,然后启动我们的客户端应用:

可以看到,数据成功创建了。同样,如果检查响应,我们会发现201:

在ASP.NET Core中使用HttpClient发送一个PUT请求
就像处理POST请求一样,我们将首先使用快捷方法,然后展示如何使用HttpRequestMessage类做同样的事情。
在修改客户端项目之前,我们只想提一下,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方法中放置一个断点,并启动应用程序:

同样,如果我们检查我们的数据库:

现在可以确认我们数据更新成功了。
使用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();
}

让我们启动应用程序:

成功了。如果不放心也可以检查一下数据库。
使用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();
}

也没什么新鲜的。我们仍然在请求中添加accept头。然后,我们必须在客户端反序列化这些内容。我们可以从Execute方法中调用这个方法并运行应用程序,应该会收到204状态码。
结论
因此,在本文中,我们学习了如何使用快捷方法和HttpRequestMessage类从客户端应用程序发送POST、PUT和DELETE请求。结合我们从上一篇文章中获得的知识,我们已经使用HttpClient类覆盖了所有的CRUD方法。
在下一篇文章中,我们将更多地了解PATCH请求以及如何使用HttpClient发送它。
原文链接:code-maze.com/httpclient-example-aspnet-core-post-put-delete/
以上就是在ASP.NET Core中用HttpClient发送POST, PUT和DELETE请求的详细内容,更多关于ASP.NET Core中应用HttpClient的资料请关注华域联盟其它相关文章!

您可能感兴趣的文章:ASP.NET Core扩展库之Http通用扩展库的使用详解ASP.NET Core扩展库之Http日志的使用详解如何在ASP.NET Core中使用HttpClientFactory在ASP.NET Core中应用HttpClient获取数据和内容在ASP.NET Core5.0中访问HttpContext的方法步骤.NET CORE HttpClient的使用方法ASP.NET Core中的Http缓存使用.net Core 使用IHttpClientFactory请求实现.NET Core使用HttpClient进行表单提交时遇到的问题.Net Core下HTTP请求IHttpClientFactory示例详解如何在 .NET 中使用 Flurl 高效处理Http请求

ASP.NET
Core
HttpClient
发送请求

相关文章
ASP.NET程序中常用代码汇总对于学习asp.net的朋友能用的到 2008-11-11
ASP.NET实现按拼音码模糊查询的方法我们在做数据录入或者查询的时候,经常需要实现按用户输入的拼音码进行数据的模糊查询功能,本文为大家介绍ASP.NET如何实现按拼音码模糊查询,需要的朋友可以参考下 2015-09-09
Asp.Net Core轻松学之利用日志监视进行服务遥测详解这篇文章主要给大家介绍了关于Asp.Net Core轻松学之利用日志监视进行服务遥测的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧 2018-12-12
asp.net数据绑定DataBind使用方法asp.net数据绑定DataBind使用方法,大家参考使用吧 2013-12-12
java 单例模式(饿汉模式与懒汉模式)这篇文章主要介绍了java 单例模式(饿汉模式与懒汉模式)的相关资料,希望通过本文大家能掌握这部分内容,需要的朋友可以参考下 2017-09-09
asp.net动态添加js文件调用到网页的方法这篇文章主要介绍了asp.net动态添加js文件调用到网页的方法,涉及asp.net动态添加js的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 2015-04-04
.NET连接数据库以及基本的增删改查操作教程这篇文章主要给大家介绍了关于.NET连接数据库以及基本的增删改查操作教程的相关资料,对于刚入门的新手们来说是个很好的入门教程,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。 2018-01-01
Asp.NET调用百度翻译的方法这篇文章主要介绍了Asp.NET调用百度翻译的方法,是针对百度接口开发的经典实用技巧,非常具有实用价值,需要的朋友可以参考下 2015-02-02
服务器安全狗导致ASP.NET网站运行出错的一个案例这篇文章主要介绍了服务器安全狗导致ASP.NET网站运行出错的一个案例,最后一并给出了解决方法,需要的朋友可以参考下 2014-08-08
ASP.NET MVC5+EF6+EasyUI后台管理系统 微信公众平台开发之资源环这篇文章主要介绍了ASP.NET MVC5+EF6+EasyUI后台管理系统,微信公众平台开发之资源环境准备,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2016-09-09

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。