搜索结果

×

搜索结果将在这里显示。

🍉使用示例(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. 路由映射的三种姿势

  1. 方法映射:逻辑清晰,易于维护。
    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"}""");
}
  1. 匿名函数/Lambda:适合极简逻辑。
    MyAPI.AddRoute("/status", (req, resp) => resp.WriteAsync("OK"), "GET");
  2. 多动作路由:在逻辑内判断分发。
    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}");
}