public async Task Get() { var context = ControllerContext.HttpContext; var isSocketRequest = context.WebSockets.IsWebSocketRequest; if (!isSocketRequest) { context.Response.StatusCode = 401; } else { WebSocket socket = await context.WebSockets.AcceptWebSocketAsync(); _webSocketHandler.OnConnected(socket); var buffer = new byte[_BUFFER_SIZE]; WebSocketReceiveResult result = await socket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); while (!result.CloseStatus.HasValue) { await _webSocketHandler.OnMessage(socket, result, buffer); result = await socket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); } _webSocketHandler.OnDisconnected(socket); } }