我正在开发一个需要连接到 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);
}
知道如何在连接时添加此标头吗?
根据微软提供的文档,一些常见的 headers 被认为是受限制的,要么直接由 API 暴露(如 Content-Type),要么受系统保护,无法更改。
受限制的标头是:
在这种情况下您能做的就是,您需要找到 ClientWebSocketOptions 的私有引用 WebHeaderCollection(在 ClientWebSocket 上公开为 Options 属性)并调用受保护的 AddWithoutValidate 方法来设置标头。