跳到主要内容
版本:4.0-beta

创建HttpService

定义

定义

命名空间:
TouchSocket.HttpTouchSocket.Http.WebSockets
安装:
dotnet add package TouchSocket.Http

一、说明

HttpServiceTouchSocket框架中用于构建高性能HTTP服务的核心组件。它提供了一个轻量级、高效的Web服务解决方案,支持现代Web开发的各种需求。无论是构建REST APIWeb服务还是文件服务器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服务 - 支持WindowsLinuxmacOS等多平台部署
  • 🏗️ 遗留系统集成 - 完美支持.NET Framework 4.6.2+,可无缝集成到现有老项目
  • 🚀 现代应用开发 - 全面支持.NET Core/.NET 5-9,享受最新框架特性
  • 📁 文件服务器 - 高效的文件上传、下载和管理服务
  • 🔌 微服务架构 - 轻量级的微服务HTTP通信组件
  • 🖥️ 混合应用后端 - 为桌面应用、移动应用提供HTTP服务支持
  • 📡 IoT设备通信 - 物联网设备的HTTP接口服务

四、架构设计

HttpService采用高效的会话管理架构设计:

连接管理模型

当HTTP客户端与服务器建立连接时,HttpService会为每个连接创建一个专门的HttpSessionClient实例。这种设计模式确保了:

  • 会话隔离 - 每个客户端连接拥有独立的处理实例
  • 并发安全 - 多个客户端可以同时访问服务器而不相互干扰
  • 资源优化 - 合理的连接管理和资源分配

五、插件扩展机制

HttpService提供了强大的插件系统,允许开发者通过实现IHttpPlugin接口或继承PluginBase基类来扩展功能。

支持的插件接口

插件接口触发时机功能说明
IHttpPlugin接收到HTTP请求时处理所有HTTP请求,支持链式处理

插件实现方式

  1. 接口实现 - 直接实现IHttpPlugin接口
  2. 基类继承 - 继承PluginBase类并重写相应方法
  3. 委托方式 - 通过委托函数快速添加处理逻辑

六、快速开始

创建HttpService的过程简单直观,类似于TcpService的配置方式。并且适应TcpService的所有配置项目

以下是一个完整的创建示例:

6.1 创建Http服务器

🔄 正在加载代码...
提示

DefaultHttpServicePlugin插件建议添加到插件链的末尾,它负责:

  • 为找不到匹配路由的请求返回404状态
  • 自动处理OPTIONS方法的CORS预检请求

如果不使用此插件,需要自行处理这些默认场景。

6.2 接收并处理请求

在http服务器中,所有的请求处理都通过插件来完成。以下是一个简单的插件示例:

🔄 正在加载代码...

七、请求数据获取

7.1 HttpContext生命周期

每当HTTP客户端与服务器建立连接时,系统会创建:

  • 一个HttpSessionClient实例 - 负责管理客户端连接
  • 一个HttpContext实例 - 负责处理HTTP请求/响应上下文

对于同一个连接的所有HTTP请求,都会复用同一个HttpContext实例,通过其RequestResponse属性可以访问请求数据和构建响应内容。

🔄 正在加载代码...

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响应的构建遵循以下基本流程:

  1. 设置状态码 - 指定HTTP状态码和状态描述
  2. 添加响应头 - 设置必要的HTTP头部信息
  3. 设置响应体 - 添加响应内容数据
  4. 发送响应 - 调用AnswerAsync()完成响应发送

8.1 设置响应状态

🔄 正在加载代码...

8.2 设置响应Header

🔄 正在加载代码...

8.3 设置响应内容

🔄 正在加载代码...

或者直接返回JsonXmlText等内容。使用此快捷方式,会同时添加对应的ContentTypeHeader。

🔄 正在加载代码...
🔄 正在加载代码...

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使用示例,可以帮助您快速上手: