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

如何为Mariusz Kotas的Websocket.Client添加自定义HttpHeaders

解决Websocket.Client添加自定义Http请求头的问题

问题根源

你代码中直接访问client.NativeClient时出现空引用,是因为NativeClient在调用client.Start()之前并未完成初始化,只有在连接启动后才会被实例化。

推荐解决方案:使用HttpRequestMessageFactory自定义请求头

这是Websocket.Client官方推荐的自定义请求头方式,无需依赖NativeClient,且能保证重连时请求头自动生效:

using (var client = new WebsocketClient(url))
{
    // 通过HttpRequestMessageFactory创建带自定义头的请求
    client.Options.HttpRequestMessageFactory = () =>
    {
        var request = new HttpRequestMessage(HttpMethod.Get, url);
        request.Headers.Add("Sec-WebSocket-Extensions", "permessage-deflate");
        request.Headers.Add("Accept-Encoding", "gzip, deflate, br");
        return request;
    };

    client.ReconnectTimeout = TimeSpan.FromSeconds(30);
    client.ReconnectionHappened.Subscribe(info =>
        Log.Information($"Reconnection happened, type: {info.Type}"));

    client.MessageReceived.Subscribe(msg => Log.Information($"Message received: {msg}"));
    client.Start();

    Task.Run(() => client.Send("{ message }"));

    exitEvent.WaitOne();
}

备选方案:在连接建立后操作NativeClient

如果一定要通过NativeClient设置请求头,需在连接成功后(即NativeClient初始化完成后)进行操作,比如订阅ConnectionOpened事件:

using (var client = new WebsocketClient(url))
{
    client.ConnectionOpened.Subscribe(_ =>
    {
        // 此时NativeClient已实例化,可设置请求头
        client.NativeClient.Options.SetRequestHeader("Sec-WebSocket-Extensions", "permessage-deflate");
        client.NativeClient.Options.SetRequestHeader("Accept-Encoding", "gzip, deflate, br");
    });

    client.ReconnectTimeout = TimeSpan.FromSeconds(30);
    client.ReconnectionHappened.Subscribe(info =>
        Log.Information($"Reconnection happened, type: {info.Type}"));

    client.MessageReceived.Subscribe(msg => Log.Information($"Message received: {msg}"));
    client.Start();

    Task.Run(() => client.Send("{ message }"));

    exitEvent.WaitOne();
}

注意:这种方式存在局限性——WebsocketClient重连时会重新创建NativeClient,需要重新设置请求头,不如第一种方案可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:37:55