资讯详情

C# 学习笔记-使用 类型化客户端搭建HTTP客户端服务

📅 2026/9/16 8:06:17 | 华诺云谱 👁 阅读
C# 学习笔记-使用 类型化客户端搭建HTTP客户端服务
文章目录一、概述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());}}
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。