首页 > 解决方案 > 如何在关闭 WebSocket c# 时传递自定义 WebSocketCloseStatus

问题描述

目前我使用下面的函数来关闭 websocket

await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);

以下是可以提供的可能值WebSocketCloseStatus

namespace System.Net.WebSockets
{
    public enum WebSocketCloseStatus
    {
        NormalClosure = 1000,
        EndpointUnavailable = 1001,
        ProtocolError = 1002,
        InvalidMessageType = 1003,
        Empty = 1005,
        InvalidPayloadData = 1007,
        PolicyViolation = 1008,
        MessageTooBig = 1009,
        MandatoryExtension = 1010,
        InternalServerError = 1011
    }
}

但是我想在关闭 websocket 时提供自定义数字作为 websocketclosestatus,例如 4200、4201、4202 等。因为我的消息来源希望我用这些自定义数字关闭 websocket。每个数字都有自己的含义。

有什么想法吗 ?

编辑:注意,我没有使用任何 3rd 方库/Nuget 包来连接/接收/关闭 websocket,我System.Net.WebSockets只使用该库。

标签: c#.netwebsocket

解决方案


您可以使用强制转换来发送自定义状态: 我不知道您使用的是哪个框架,只检查了经典的 .Net 框架(v4.8)。 参数从( source ) 更深地传递到函数,首先验证此参数。此验证仅检查状态是否在有效范围内(不是介于 0 和 999 之间,并且没有某些特殊状态 1006 或 1015)。然后更深入地调用(source)的函数。在这里,此参数被分配给对象的属性-此属性被强制转换为然后它在线路中输出。 没有检查该参数是否应仅具有来自枚举列表的值。
client.CloseAsync((WebSocketCloseStatus)4005, "Empty", cts.Token);

提琴手


closeStatusCloseAsyncCloseOutputAsyncWebSocketOperation.CloseOutputOperationm_CloseOutputOperation.CloseStatus = closeStatus;ushort payloadBuffer.CloseStatus.CloseStatus = (ushort)CloseStatus;


推荐阅读