Flutter无法接收C# Web API的SignalR消息问题排查
可能的故障原因及排查方向
1. IHubContext 注入错误
API 中的 _hubContext 若未正确注入 IHubContext<DangerReportHub>,会导致消息发送到错误的 Hub 实例(或无有效实例)。
- 排查:检查控制器构造函数的注入逻辑是否正确,示例如下:
同时确认 Program.cs/Startup.cs 中private readonly IHubContext<DangerReportHub> _hubContext; public YourController(IHubContext<DangerReportHub> hubContext) { _hubContext = hubContext; }MapHub<DangerReportHub>("/dangerReportHub")的注册配置无误。
2. API 方法未进入消息发送分支
调用 ReportDanger 接口时,若 _dangerService.ReportDanger 返回的 danger.Data 为 false,会直接跳过 SignalR 消息发送逻辑,返回 BadRequest。
- 排查:
- 查看 API 调用的返回状态码,若为 400,说明走了错误分支,需检查
_dangerService.ReportDanger的业务逻辑。 - 在 API 方法中添加日志,确认
danger.Data的值,以及是否执行到await _hubContext.Clients.All.SendAsync(...)代码行。
- 查看 API 调用的返回状态码,若为 400,说明走了错误分支,需检查
3. DangerSignalRDTO 序列化异常
SignalR 默认使用 System.Text.Json 序列化对象,若 DangerSignalRDTO 不符合序列化要求,会导致消息无法正常发送(或客户端无法解析)。
- 排查:
- 确保
DangerSignalRDTO存在无参公共构造函数。 - 确保所有需要传递的属性为公共可访问(public)。
- 临时将
dangerSignalR替换为简单字符串(如await _hubContext.Clients.All.SendAsync("ReceiveDangerReport", "test")),测试是否能收到消息,以此排除序列化问题。
- 确保
4. Cors 中间件位置错误
即便配置了 Cors 策略,若 app.UseCors("CorsPolicy") 位置不当,可能导致 API 调用的跨域处理异常,间接影响 SignalR 消息发送。
- 排查:确保
UseCors放在UseRouting之后、UseEndpoints之前:app.UseRouting(); app.UseCors("CorsPolicy"); app.UseEndpoints(x => { x.MapControllers(); x.MapHub<DangerReportHub>("/dangerReportHub"); });
5. Flutter 端 Hub 连接未持久化
_initHubConnection 中的 hubConnection 若为局部变量,方法执行完毕后会被 GC 回收,导致连接断开;或者连接已意外中断但未触发重连。
- 排查:
- 将
hubConnection改为类成员变量,避免被回收:HubConnection? _hubConnection; // 类成员变量 Future<void> _initHubConnection() async { const serverUrl = "http://*.*.*.*/dangerReportHub"; _hubConnection = HubConnectionBuilder() .withUrl(serverUrl) .withAutomaticReconnect() .build(); // 其他连接配置 } - 添加连接状态监听,确认 API 调用时连接处于活跃状态:
_hubConnection!.onclose(({Exception? error}) => print("连接关闭: ${error?.toString()}")); _hubConnection!.onreconnecting((Exception? error) => print("正在重连: ${error?.toString()}")); _hubConnection!.onreconnected((String? connectionId) => print("重连成功: $connectionId"));
- 将
内容的提问来源于stack exchange,提问作者zav
相关产品推荐
相关产品推荐

