public override async Task HandleRequestAsync(IHttpContext context) { if (context.IsHandled) { return; } if (!context.Request.IsWebSocketRequest) { return; } var absolutePath = context.Request.Url.AbsolutePath; var socket = webSockets.FirstOrDefault(f => f.Route == absolutePath); if (socket == null) { context.Response.StatusCode = (int)HttpStatusCode.NotFound; context.Close(); return; } if (!socket.IsInstanceGenerated) { throw new NullReferenceException($"{socket.SocketType.Name} is null reference"); } if (socket.Instance != null) { var httpListenerWebSocketContext = await context.AcceptWebSocketRequest(); socket.Instance.Invoke(WebSocketConstants.OnBeforeConnectedMethod, BindingFlags.Instance | BindingFlags.NonPublic, new[] { httpListenerWebSocketContext }); } }