首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
C# 学习笔记-使用 类型化客户端搭建HTTP客户端服务
📅 2026/9/16 8:06:19
✍️ 爱科研究院
👁 阅读 3,247
文章目录一、概述1.1 框架语言1.2 Http简介二、使用IHttpClientFatory2.1 安装Nuget包2.2 类型化客户端2.2.1 创建数据模型2.2.2 创建服务类2.2.3 注册服务2.2.4 应用代码中访问香染衣黑海森狱五大晶灵中最擅防御术的金晶灵有着公子般的文质气息外貌较为冷艳性格却是十分豪爽外冷内热、快人快语与随从晴儿互动总是干净利落。隐居在森狱深处的天堂森林中已许久不管森狱之事但依旧暗中注意着森狱的变化故当玄同与紫鷨因替阎王取药的关系来到天堂森林也开启了金晶灵再出的契机。一、概述1.1 框架语言框架.net 10.0C#语言14.01.2 Http简介超文本传输协议Hypertext Transfer ProtocolHTTP是一个简单的请求-响应协议它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出而消息内容则具有一个类似MIME的格式。超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议是万维网WWWWorld Wide Web的数据通信的基础。HTTP是应用层协议同其他应用层协议一样是为了实现某一类具体应用的协议并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范这种规范记录在文档上为真正通过HTTP进行通信的HTTP的实现程序。HTTP是基于B/S架构进行通信的而HTTP的服务器端实现程序有httpd、nginx等其客户端的实现程序主要是Web浏览器例如Firefox、Internet Explorer、Google Chrome、Safari、Opera等此外客户端的命令行工具还有elink、curl等。Web服务是基于TCP的因此为了能够随时响应客户端的请求Web服务器需要监听在80/TCP端口。这样客户端浏览器和Web服务器之间就可以通过HTTP进行通信了。HTTP是基于客户/服务器模式且面向连接的。典型的HTTP事务处理有如下的过程1客户与服务器建立连接2客户向服务器提出请求3服务器接受请求并根据请求返回相应的文件作为应答4客户与服务器关闭连接。二、使用IHttpClientFatory2.1 安装Nuget包Microsoft.Extensions.HttpMicrosoft.Extensions.Hosting我这边安装最新稳定版本10.0.12工具- NuGet 包管理器 - 管理解决方案的NuGet 程序包然后搜索对应的包进行添加。注本文数据使用https://jsonplaceholder.typicode.com/作为测试。2.2 类型化客户端2.2.1 创建数据模型/// summary/// 待办/// /summary/// param nameUserId/param/// param nameId/param/// param nameTitle/param/// param nameCompleted/parampublicrecordclassTodo(intUserId,intId,stringTitle,boolCompleted);2.2.2 创建服务类/// summary/// Todo服务/// /summary/// remarks使用类型化客户端时是需要有包含HttpClient的构造函数/remarkspublicclassTodoService(HttpClienthttpClient){publicasyncTaskTodo[]GetUserTodosAsync(intuserId){try{// Make HTTP GET request// Parse JSON response deserialize into Todo typeTodo[]?todosawaithttpClient.GetFromJsonAsyncTodo[]($todos?userId{userId},newJsonSerializerOptions(JsonSerializerDefaults.Web));returntodos??[];}catch(Exceptionex){MessageBox.Show(Error getting something fun to say: {Error},ex.Message);}return[];}}2.2.3 注册服务在启动代码中进行注册。/// summary/// Interaction logic for App.xaml/// /summarypublicpartialclassApp:Application{publicstaticIServiceProviderServices{get;privateset;}null!;privateHostApplicationBuilderbuilderHost.CreateApplicationBuilder();protectedoverridevoidOnStartup(StartupEventArgse){builder.Services.AddHttpClientTodoService().ConfigureHttpClient(client{// 设置地址client.BaseAddressnewUri(https://jsonplaceholder.typicode.com/);// 设置客户端身份client.DefaultRequestHeaders.UserAgent.ParseAdd(todo-client);});// 通过DI获取控件才能正常注册需要注销Xaml中的StartUribuilder.Services.AddTransientMainWindow();varhostbuilder.Build();Serviceshost.Services;// 从容器解析主窗口并显示varmainWindowServices.GetRequiredServiceMainWindow();mainWindow.Show();base.OnStartup(e);}}2.2.4 应用代码中访问privatereadonlyTodoService?todoService;/// summary/// 客户端需要实现有参构造函数才能正常使用/// /summary/// param nametodoService/parampublicMainWindow(TodoServicetodoService):this(){this.todoServicetodoService;}publicMainWindow(){InitializeComponent();}privatevoidBtn_GetTodos_Click(objectsender,RoutedEventArgse){_GetTodo();}privateasyncTaskGetTodo(){if(todoServicenull)return;vartodosawaittodoService.GetUserTodosAsync(1);for(inti0;itodos.Length;i){WriteLog(todos[i].ToString());}}privatevoidWriteLog(stringmsg){paragraph_msg.Inlines.Add(newRun(msg));paragraph_msg.Inlines.Add(newLineBreak());}}
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/16 8:06:19
GD32H759+RT-Thread以太网驱动移植实战:从零到稳定联网
2026/9/16 8:06:19
UniApp集成鸿蒙智感握姿技术实战指南
2026/9/16 8:06:19
Playwright框架:现代Web自动化测试的核心技术与实践
2026/9/16 8:46:26
代码注入与Hook技术原理及Android实践
2026/9/16 8:46:26
ADS8689单电源双极性采样实战:参考电压与信号调理全解析
2026/9/16 8:46:26
ESP32通过IIC读取QMA6100P加速度计:寄存器配置与Arduino驱动
2026/9/16 8:46:26
本体测试十大常见错误与根因排查指南
2026/9/16 8:46:26
告别破解版:IDEA社区版轻量配置与高效开发实战
2026/9/16 8:41:26
AI论文平台评测:功能对比与学术研究效率提升
2026/9/16 0:00:15
嵌入式三大高薪赛道:车规功能安全、RISC-V固件架构、边缘AI部署
2026/9/16 0:00:15
Zephyr 移植指南:SAM R34 Xplained Pro(samr34_xpro)评估板支持与 LoRa 开发实战
2026/9/16 0:00:15
纯HTML+SVG图解工具:出版级架构图的语义化生成方案
2026/9/15 13:08:25
拯救者Y7000黑屏故障排查与维修实战指南
2026/9/16 7:38:03
AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
2026/9/16 1:54:57
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化