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

C#使用ClientWebSocket如何设置自定义Sec-WebSocket-Protocol协议?

问题原因

ClientWebSocket 对 Sec-WebSocket-Protocol 请求头做了内部专属管控,直接调用 SetRequestHeader 手动设置该头会被内部的子协议校验逻辑覆盖,最终发出去的请求不会携带你设置的JWT值,因此触发服务端协议校验报错。Postman的WebSocket工具没有这层内部限制,所以直接设置头即可生效。

正确实现方案

使用 ClientWebSocketOptions 提供的 AddSubProtocol 方法传入JWT作为子协议即可,代码示例如下:

var client = new ClientWebSocket();
// 不要直接SetRequestHeader设置Sec-WebSocket-Protocol,用AddSubProtocol
client.Options.AddSubProtocol("你的JWT字符串");
await client.ConnectAsync(new Uri("你的WebSocket服务地址"), CancellationToken.None);

注意事项

  • 确保传入的JWT没有空格、换行等特殊字符,符合WebSocket子协议的token格式要求,原生JWT本身是Base64URL编码的三段式结构,天然符合要求不需要额外处理
  • 若服务端要求同时传多个子协议,多次调用AddSubProtocol依次添加即可

内容的提问来源于stack exchange,提问作者Joe Phillips

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:54:03