如何使用 c# 中的“授权”、“承载”、令牌创建到 URL 的 websocket

1 c# websocket-sharp

我需要在 C# 中创建一个到特定 url(无法显示)的 websocket。是否有类似于 Java 中的 WebSocket API 或 C# 中的 libwebsockets 的东西?

我已经按照一些SO答案尝试使用WebSocketSharp和ChilKat。还尝试使用 Microsoft 的 WebSocket 命名空间。但总是收到“未授权”错误 401。我还尝试执行 Http get 并尝试按照 MDN 文档中创建 WebSocket 服务器的教程添加标头以将套接字升级到 Websocket,但只获得重定向的网页作为回报。这是我用于 HTTP 升级请求的代码。我是 c# 初学者。

ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                                                    | SecurityProtocolType.Tls11
                                                    | SecurityProtocolType.Tls12
                                                    | SecurityProtocolType.Ssl3;
            ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) =>
            {
                return true;
            };
            var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress));
            http.AllowAutoRedirect = false;
            http.UseDefaultCredentials = true;
            http.PreAuthenticate = true;
            http.Credentials = CredentialCache.DefaultCredentials;
            http.Proxy.Credentials = CredentialCache.DefaultCredentials;
            http.Accept = "application/json";
            http.ContentType = "application/json";
            http.Method = "GET";
            http.Connection = "Open";
            http.Headers.Add("Authorization", "Bearer " + Token);
            //http.Headers.Add("Connection", "Upgrade");
            http.Headers.Add("Upgrade", "websocket");
            http.KeepAlive = true;
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标是,

Websocket socket = new Websocket();
socket.addHeader(Authorization, Bearer, Token);
socket.connect(); 
Run Code Online (Sandbox Code Playgroud)

预先感谢您的任何意见。

luk*_*ler 5

我正在使用ClientWebSocket使用 OAuth 令牌连接到 Zendesk 聊天流 API,如下所示:

var webSocket = new ClientWebSocket();
webSocket.Options.SetRequestHeader("Authorization", $"Bearer {_oauthToken}");
var cts = new CancellationTokenSource();
await webSocket.ConnectAsync(new Uri(url), cts.Token);
Run Code Online (Sandbox Code Playgroud)

这个对我有用!