🍉使用示例(C#)
🧰 MicroServer 渐进式使用手册 (C# 版)
第一章:基础 WebAPI(开箱即用)
如果你只需要程序具备响应 Web 请求、返回数据的功能,看这一节就够了。
1. 启动服务与起步
只需初始化 WebAPIServer 并调用 StartServer。
using MicroServer;
// 初始化服务零件
var MyAPI = new WebAPIServer();
void Main()
{
// 启动服务(默认端口 8090)
MyAPI.StartServer();
// 注册路由(见下方映射方法)
MyAPI.AddRoute("/", hello, "GET");
Console.ReadKey();
}
相关管理方法
// 添加路由白名单,白名单内的路由不经过中间件处理
MyAPI.RouteWhiteList.Add("/hello");
MyAPI.ClearRoutes(); // 清除所有路由
MyAPI.StopServer(); // 停止服务
2. 路由映射的三种姿势
- 方法映射:逻辑清晰,易于维护。
MyAPI.AddRoute("/hello", hello, "GET");
private async Task hello(HttpListenerRequest request, HttpListenerResponse response)
{
// 获取 url 查询参数
string name = request.ParseGetQueryString("name") ?? "MicroServer";
// 使用 C# 原始字符串字面量,完美呈现 JSON 结构
await response.WriteAsync($$"""{"code":1, "msg":"Hello {{name}} WebAPI"}""");
}
- 匿名函数/Lambda:适合极简逻辑。
MyAPI.AddRoute("/status", (req, resp) => resp.WriteAsync("OK"), "GET"); - 多动作路由:在逻辑内判断分发。
MyAPI.AddRoute("/user", users);
private async Task users(HttpListenerRequest request, HttpListenerResponse response)
{
switch (request.HttpMethod)
{
case "GET":
// 生成一个有效期为 1 小时的 JWT Token
long exp = MyAPI.GetTimeStamp10(60 * 60);
string token = MyAPI.JWT.GenerateToken($$"""
{
"username": "microserver",
"exp": {{exp}}
}
""");
await response.WriteAsync($$"""
{
"code": 1,
"msg": "获取用户信息成功",
"data": {"username": "microserver", "age": 30},
"token": "{{token}}"
}
""");
break;
case "POST":
// 解析 Token 负载内容(非法 Token 会被中间件拦截)
string payload = MyAPI.JWT.DecodePayload(request.GetToken());
await response.WriteAsync($$"""{"code":1, "msg":"创建用户成功", "data":{{payload}}}""");
break;
default:
response.StatusCode = 405;
await response.WriteAsync("""{"code":0, "msg":"方法不允许"}""");
break;
}
}
内置方法
string body = await request.GetStringAsync(); // 获取请求体字符串
long ts13 = MyAPI.GetTimeStamp13(3600000); // 13位时间戳(当前+1小时)
long ts10 = MyAPI.GetTimeStamp10(3600); // 10位时间戳(当前+1小时)
string postName = request.ParsePostQueryString("name"); // 获取 POST 表单键值
第二章:武器库扩展(流媒体与长连接)
1. 视频播放与预览
asAttachment 默认为 true(强制下载)。设为 false 可用于视频播放器预览。
// 适合视频播放器调用
MyAPI.AddRoute("/mp4", (req, resp) => resp.SendFileAsync(@"D:\movie.mp4", false), "GET");
2. 实时直播流模式
isLive: true 开启 Chunked 模式且不缓存,非常适合安防监控转发。
MyAPI.AddRoute("/live", (req, resp) => {
var fs = new FileStream("camera.mp4", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
return resp.SendStreamAsync(fs, "video/mp4", isLive: true);
}, "GET");
3. 长连接与文件上传
// 长连接推送:注意结束时务必调用 resp.Close()
MyAPI.AddRoute("/notify", (req, resp) => resp.WriteChunkAsync("报警信息"), "GET");
// 上传文件:支持进度回调
MyAPI.AddRoute("/upload", (req, resp) => req.SaveFileAsync(@"D:\up.dat", (cur, total) => Console.WriteLine($"进度:{cur * 100 / total}%")), "POST");
第三章:安全守卫(JWT 与中间件)
1. 开启拦截验证
只需一行代码,自动校验 Header 中的 Authorization 字段。
MyAPI.AddSimpleTokenVerify("333"); // 简单 Token 模式
MyAPI.AddJwtTokenVerify("micoroserver779"); // JWT 模式
内置两种身份鉴权中间件对webapi、websocket、文件上传下载等操作统一鉴权。无需鉴权的路由可添加至白名单MyAPI.RouteWhiteList.Add("/hello");。
2. 身份令牌操作
string token = request.GetToken(); // 通用获取 Token
// 生成 1 小时有效的 JWT
string jwt = MyAPI.JWT.GenerateToken($$"""{"user":"admin","exp":{{MyAPI.GetTimeStamp10(3600)}}}""");
// 解码 Token 负载
string payload = MyAPI.JWT.DecodePayload(token);
第四章:实时通信(WebSocket)
WebSocket服务端
1. 配置与启用
MyAPI.enableWebSocket = true;
MyAPI.WsOnConnectionChanged = WsConnectChanged;
MyAPI.WsOnMessage = OnMessageReceived;
2. 状态与消息处理
private async Task OnMessageReceived(string clientId, string msg, Func<string, Task> sendReply)
{
Console.WriteLine($"来自 {clientId} 的消息: {msg}");
await sendReply($"已收到: {msg}");
}
private void WsConnectChanged(string clientId, bool connected)
{
Console.WriteLine($"客户端 {clientId} " + (connected ? "已连接" : "已断开"));
}
// 获取在线 ID 列表
var onlineClients = MyAPI.WsGetOnlineClients();
WebSocket客户端
1. 引用与实例声明
using MicroServer;
class WebSocketTest
{
private WebSocketClient wsClient; // WebSocket 客户端实例
// 后续逻辑...
}
2. 初始化与事件订阅
// 初始化客户端,指定服务器地址
wsClient = new WebSocketClient("wss://echo.websocket.org/");
// 订阅核心事件
wsClient.OnConnected += OnConnected; // 连接成功
wsClient.OnMessageReceived += OnMessageReceived; // 接收消息
wsClient.OnDisconnected += OnDisconnected; // 连接断开
wsClient.OnError += OnError; // 异常触发
3. 核心操作
| 方法 | 功能说明 |
|---|---|
wsClient.StartConnect() |
启动客户端,建立与服务器的连接 |
wsClient.SendMessageAsync(string message) |
异步发送字符串消息到服务器 |
wsClient.StopConnect() |
主动断开 WebSocket 连接 |
4. 事件回调示例
// 连接成功
private void OnConnected(object sender, EventArgs e)
{
Console.WriteLine("连接成功!");
}
// 接收消息
private void OnMessageReceived(object sender, string message)
{
Console.WriteLine($"收到消息: {message}");
}
// 连接断开
private void OnDisconnected(object sender, EventArgs e)
{
Console.WriteLine("连接已断开!");
}
// 异常处理
private void OnError(object sender, WebSocketErrorEventArgs e)
{
Console.WriteLine($"错误: {e.ErrorCode}, {e.ErrorMessage}");
}