You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:42:42