【WebApi】通过HttpClient调用Web Api接口
HttpClient是一个封装好的类,它在很多语言中都有被实现,现在HttpClient最新的版本是4.5。
它支持所有的http方法,自动转向,https协议,代理服务器。
一.Api接口参数标准化。
GET方式,可以有多个重载,有多个参数
POST方式,只能有一个参数,并且用[FromBody]约束,如果有多个参数,需要以对象的方式进行传递
Put方式,只能有两个参数,其中一个是通过Request.QueryString方式进行传递的,作为要更新对象的主键,别一个是[FromBody]字段,也是一个字段,如果多个字段需要把它封装成对象。
二.调用方
我们看一下最基本网页中ajax请求(Get | Set)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $.ajax({ url: "http://localhost:xxx/api/register", type: "GET", success: function (data) { console.log("json:" + data); } }); $.ajax({ url: "http://localhost:xxx/api/register", type: "Post", data: {'':''} success: function (data) { console.log("json:" + data); } }); |
三.通过控制台实现Get&&Post请求
//Get:
static async void ClientGet()
{
string url = "http://localhost:xxx/api/register";
var handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip
};
using ( var http = new HttpClient( handler ) )
{
var response = await http.GetAsync( url );
response.EnsureSuccessStatusCode();
await response.Content.ReadAsStringAsync();
}
}
/*
* / <summary>
* / HttpClient实现Post请求
* / </summary>
*/
static async void dooPost()
{
string url = "http://localhost:52824/api/register";
var userId = "1";
/* 设置HttpClientHandler的AutomaticDecompression */
var handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip
};
/* 创建HttpClient(注意传入HttpClientHandler) */
using ( var http = new HttpClient( handler ) )
{
/* 使用FormUrlEncodedContent做HttpContent */
var content = new FormUrlEncodedContent( new Dictionary<string, string>()
{
{ "", userId } /* 键名必须为空 */
} );
/* await异步等待回应 */
var response = await http.PostAsync( url, content );
/* 确保HTTP成功状态值 */
response.EnsureSuccessStatusCode();
/* await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip) */
Console.WriteLine( await response.Content.ReadAsStringAsync() );
}
}
无论是web,手机端,都是有自己的WebClient,都是一样的,语言也是,那如果说你的Api是一个的参数是一个对象类型的,这还是大同小异的,比如ajax的调用方式直接把data变成一个data对象,那我们C#的这个参数应该是个什么呢,这个时候我们应该用到FormUrlEncodedContent,使用这个类型去做httpcontext.
1 2 3 4 5 | var content = new FormUrlEncodedContent( new Dictionary< string , string >() { { "Id" , "6" }, { "Name" , "zara" }, { "Info" , "zzh" } }); |
那最后呢也没有什么区别了,只不过在异步去请求的时候去更换PostAsync , GetAsync , PutAsync 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异