WebAPI 控制 - Snet Docs

🌐 WebAPI 控制

每个 DaqAbstract 子类自动支持 6 个内置 REST 端点用于远程控制。这些端点由 DAQ 实例内的 HttpServiceOperate 托管。


6个 REST 端点

路由 方法 请求体 描述
/api/on POST 打开设备连接
/api/off POST 关闭设备连接
/api/read POST Address JSON 从设备读取数据
/api/write POST WriteModel 字典 JSON 向设备写入数据
/api/getstatus POST 获取连接状态
/api/switchlanguage POST 切换中/英文语言

启动 WebAPI 服务器

使用 WAOnAsync 在指定端口上启动 HTTP 服务器:

var modbus = await ModbusOperate.InstanceAsync(basics);

var wam = new WAModel
{
    Port = 6688,        // 默认端口(按约定与设备端口匹配)
    IpAddress = "127.0.0.1"      // 绑定到所有接口("+" = http://+:6688/)
};

var result = await modbus.WAOnAsync(wam);
if (result.Status)
{
    Console.WriteLine($"WebAPI started on port {wam.Port}");
}

停止 WebAPI 服务器

var result = await modbus.WAOffAsync();

检查 WebAPI 状态

var status = await modbus.WAStatusAsync();
Console.WriteLine($"WebAPI running: {status.Status}, {status.Message}");

WebAPI 请求示例

通过 HTTP 读取数据

POST /api/read HTTP/1.1
Content-Type: application/json

{
    "SN": "8c71f4a7-04eb-4f9c-88d9-849c2f0c3a00",
    "AddressArray": [
        {
            "SN": "TestAddress",
            "AddressName": "M100",
            "AddressDataType": "Float"
        }
    ],
    "CreationTime": "2024-06-05T13:01:24.6245462+08:00"
}

响应:JSON 格式的 OperateResult,包含 StatusMessageRunTimeResultData

通过 HTTP 写入数据

POST /api/write HTTP/1.1
Content-Type: application/json

{
    "M100": {
        "Value": 99.1,
        "AddressDataType": "Float"
    }
}

打开/关闭/状态(无请求体)

curl -X POST http://localhost:6688/api/on
curl -X POST http://localhost:6688/api/getstatus
curl -X POST http://localhost:6688/api/off

工作原理

WAOnAsync 创建一个 HttpServiceOperate 实例并为每个端点路径注册处理程序:

// 在 DaqAbstract.WAOnAsync() 内部
var routes = new List<string>
{
    "/api/on",
    "/api/off",
    "/api/read",
    "/api/write",
    "/api/getstatus",
    "/api/switchlanguage"
};

// 每个路由分发到对应的抽象方法:
// /api/on    -> OnAsync()
// /api/read  -> ReadAsync(parsedAddress)
// 等等.

HttpServiceOperate.OnDataEventAsync 被连接到路由分发器,该分发器解析请求体,调用相应的抽象方法,并将 OperateResult 写入 HTTP 响应。


安全注意事项

  • WebAPI 是可选的 -- 仅在显式调用 WAOnAsync 时运行
  • 没有内置身份验证;请使用反向代理(nginx、IIS)进行认证
  • 默认绑定地址 "+" 会在所有网络接口上暴露 API
  • 对于生产环境,请绑定到 "localhost" 并在前面使用安全代理

WARequestExample

获取每个端点的示例请求负载:

var example = await modbus.WARequestExampleAsync();
// example.ResultData 包含所有 6 个端点的格式化 JSON 示例