Blazor Server中WebSocket配置问题:IsWebSocketRequest始终为false
Blazor Server WebSocket连接失败:IsWebSocketRequest为false的解决办法
核心问题:中间件顺序错误
你把自定义的WebSocket处理中间件放在了app.UseWebSockets之前,而UseWebSockets中间件的作用是初始化请求的WebSocket上下文,只有先执行它,context.WebSockets.IsWebSocketRequest才能正确识别WebSocket请求。
修正后的代码
... // 先注册WebSocket支持中间件 var webSocketOptions = new WebSocketOptions() { KeepAliveInterval = TimeSpan.FromSeconds(120), }; app.UseWebSockets(webSocketOptions); // 再注册自定义的WebSocket处理中间件 app.Use(async (context, next) => { if (context.Request.Path == "/ws") { if (context.WebSockets.IsWebSocketRequest) { var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocketHandler = context.RequestServices.GetRequiredService<IWebSocketHandler>(); await webSocketHandler.HandleWebSocketAsync(context, webSocket); } else { context.Response.StatusCode = 400; } } else { await next(); } }); ...
额外验证步骤
- 测试时使用对应协议:HTTPS环境用
wss://localhost:<你的端口>/ws,HTTP环境用ws://localhost:<你的端口>/ws,不要混用。 - 检查请求头:在Chrome开发者工具的Network标签中,确认WebSocket请求包含
Upgrade: websocket和Connection: Upgrade头。 - 确认端口一致:测试用的端口要和launchSettings.json中配置的应用端口完全匹配。
内容的提问来源于stack exchange,提问作者Ace
相关产品推荐
相关产品推荐

