如何向 ClientWebSocket 添加“Accept”标头

问题描述 投票:0回答:1

我正在开发一个需要连接到 WebSocket 服务器的 C# 应用程序。 WebSocket-Server 应用程序的供应商(应用程序为其创建的客户端)强制使用“Accept”:“application/json”标头。如果没有这个,我会得到“错误请求(400)”响应。

我和邮递员一起尝试过,效果很好。 但是当我尝试在 C# 应用程序中添加此接受标头时,出现异常:

必须使用适当的属性或方法修改“Accept”标头。参数名称:名称

我的代码:

            var WS = new ClientWebSocket();
            var CTS = new CancellationTokenSource();
            WS.Options.SetRequestHeader("jwt-token", "token"); // Token provided by vendor
            WS.Options.SetRequestHeader("Accept", "application/json");
            try
            {
                await WS.ConnectAsync(new Uri("wss://sever-url"), CancellationToken.None);
                await Task.Factory.StartNew(ReceiveLoop, CTS.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

知道如何在连接时添加此标头吗?

c# .net websocket
1个回答
0
投票

根据微软提供的文档,一些常见的 headers 被认为是受限制的,要么直接由 API 暴露(如 Content-Type),要么受系统保护,无法更改。

受限制的标头是:

  • 接受
  • 连接
  • 内容长度
  • 内容类型
  • 日期
  • 期待
  • 主持人
  • 如果-修改-自
  • 范围
  • 推荐人
  • 传输编码
  • 用户代理
  • 代理连接

在这种情况下您能做的就是,您需要找到 ClientWebSocketOptions 的私有引用 WebHeaderCollection(在 ClientWebSocket 上公开为 Options 属性)并调用受保护的 AddWithoutValidate 方法来设置标头。

© www.soinside.com 2019 - 2024. All rights reserved.