创建HttpService
定义
定义
TouchSocket.Http
TouchSocket.Http.WebSockets
dotnet add package TouchSocket.Http
一、说明
HttpService
是TouchSocket
框架中用于构建高性能HTTP服务的核心组件。它提供了一个轻量级、高效的Web服务解决方案,支持现代Web开发的各种需求。无论是构建REST API
、Web服务
还是文件服务器
,HttpService
都能提供卓越的性能和简洁的开发体验。
特别值得注意的是,HttpService
拥有业界领先的框架兼容性,从经典的.NET Framework 4.6.2
到最新的.NET 9.0
全系列支持,让您的项目无论是升级改造还是全新开发都能享受到统一的开发体验。
二、核心特性
HttpService
具备以下突出特性:
- 🎯 广泛框架支持 - 从
.NET Framework 4.6.2
到.NET 9.0
全版本支持,兼容性卓越 - 🔐 完整
HTTPS
支持 - 支持SSL/TLS
加密连接,确保数据传输安全 - 📊 多种数据处理模式 - 灵活处理各种类型的
HTTP
请求数据 - 🌐 多地址监听 - 可同时监听多个
IP
地址和端口,实现灵活部署 - ⚡ 卓越性能表现 - 经过优化的高性能
HTTP
处理引擎 - 🔄 跨域支持(CORS) - 内置跨域资源共享支持,简化前后端分离开发
- 📦 AOT原生支持 - 支持提前编译,部署体积比AspNetCore小50%,启动更快
三、应用场景
HttpService
适用于以下多种场景:
- 🔗 RESTful API服务 - 构建标准的REST风格的
Web API
接口 - 🌍 跨平台Web服务 - 支持
Windows
、Linux
、macOS
等多平台部署 - 🏗️ 遗留系统集成 - 完美支持
.NET Framework 4.6.2+
,可无缝集成到现有老项目 - 🚀 现代应用开发 - 全面支持
.NET Core/.NET 5-9
,享受最新框架特性 - 📁 文件服务器 - 高效的文件上传、下载和管理服务
- 🔌 微服务架构 - 轻量级的微服务HTTP通信组件
- 🖥️ 混合应用后端 - 为桌面应用、移动应用提供HTTP服务支持
- 📡 IoT设备通信 - 物联网设备的HTTP接口服务
四、架构设计
HttpService
采用高效的会话管理架构设计:
连接管理模型
当HTTP客户端与服务器建立连接时,HttpService
会为每个连接创建一个专门的HttpSessionClient
实例。这种设计模式确保了:
- 会话隔离 - 每个客户端连接拥有独立的处理实例
- 并发安全 - 多个客户端可以同时访问服务器而不相互干扰
- 资源优化 - 合理的连接管理和资源分配
五、插件扩展机制
HttpService
提供了强大的插件系统,允许开发者通过实现IHttpPlugin
接口或继承PluginBase
基类来扩展功能。
支持的插件接口
插件接口 | 触发时机 | 功能说明 |
---|---|---|
IHttpPlugin | 接收到HTTP请求时 | 处理所有HTTP请求,支持链式处理 |
插件实现方式
- 接口实现 - 直接实现
IHttpPlugin
接口 - 基类继承 - 继承
PluginBase
类并重写相应方法 - 委托方式 - 通过委托函数快速添加处理逻辑
六、快速开始
创建HttpService
的过程简单直观,类似于TcpService
的配置 方式。并且适应TcpService的所有配置项目
以下是一个完整的创建示例:
6.1 创建Http服务器
DefaultHttpServicePlugin
插件建议添加到插件链的末尾,它负责:
- 为找不到匹配路由的请求返回404状态
- 自动处理OPTIONS方法的CORS预检请求
如果不使用此插件,需要自行处理这些默认场景。
6.2 接收并处理请求
在http服务器中,所有的请求处理都通过插件来完成。以 下是一个简单的插件示例:
七、请求数据获取
7.1 HttpContext生命周期
每当HTTP客户端与服务器建立连接时,系统会创建:
- 一个
HttpSessionClient
实例 - 负责管理客户端连接 - 一个
HttpContext
实例 - 负责处理HTTP请求/响应上下文
对于同一个连接的所有HTTP请求,都会复用同一个HttpContext
实例,通过其Request
和Response
属性可以访问请求数据和构建响应内容。
7.2 获取Query参数
7.3 获取Header参数
亦或者
7.4 获取Form参数
7.5 获取字符串Body内容
7.6 获取小体量字节Body内容
7.7 持续读取Body内容
当数据太大时,可持续读取
7.8 获取Body持续写入Stream中
当数据太大时,可持续读取数据直接到流容器中。
7.9 获取Body小文件集合
当Body内容为小文件集合时,可以使用该功能。
八、响应构建与发送
当接收并处理完HTTP请求后,可以通过e.Context.Response
对象构建并发送响应数据。
响应构建流程
HTTP响应的构建遵循以下基本流程:
- 设置状态码 - 指定HTTP状态码和状态描述
- 添加响应头 - 设置必要的HTTP头部信息
- 设置响应体 - 添加响应内容数据
- 发送响应 - 调用
AnswerAsync()
完成响应发送
8.1 设置响应状态
8.2 设置响应Header
8.3 设置响应内容
或者直接返回Json
、Xml
、Text
等内容。使用此快捷方式,会同时添加对应的ContentType
Header。
8.4 开始响应内容
当通过上述步骤,完成了响应体的构建后,即可使用AnswerAsync
直接进行响应。
例如:响应一个hello
文本内容,代码大致如下:
当然可以链式调用API:
8.5 插件响应Get请求
8.6 响应文件请求
当响应的文件,希望浏览器直接显示时(例如:html,js,css),不应该指定文件名,不然浏览器会调用下载保存操作,而非直接显示。
在响应文件时,传入请求的request
,主要是当请求包含断点续传时,能成功续传。所以,应当应可能的满足该功能。
该操作支持大型文件,也支持断点续传、支持迅雷加速等。
8.7 响应页面请求
九、进阶响应操作
9.1 响应有长度大数据
当响应的数据,在响应时,已知数据长度的话,可以使用此方法。
9.2 响应不知长度数据(Chunk模式)
当响应的数据,在响应时,不知数据长度的话,可以使用此方法。
九、HTTPS安全服务
9.1 启用SSL/TLS加密
HttpService
支持完整的HTTPS
功能,只需在配置中添加SSL
选项即可,详细配置可看Tcp服务器 。
例如:
9.2 注意事项
- 证书格式 - 支持.pfx、.crt等标准证书格式
- 端口选择 - HTTPS服务通常使用443端口
- 混合部署 - 可以同时运行HTTP(80)和HTTPS(443)服务
十、示例项目
以下是完 整的HttpService
使用示例,可以帮助您快速上手: