How does ASP.NET (Core) support WebSockets?

Posted: (EET/GMT+2)

 

WebSockets are a great way to add real-time, bidirectional communication between the browser and your ASP.NET Core application. Unlike regular HTTP requests, WebSockets keep a persistent connection open, so the server can send data whenever it needs to.

ASP.NET Core has built-in support for WebSockets through a small middleware component. You can enable it in your Startup class like this:

app.UseWebSockets();

app.Use(async (context, next) =>
{
    if (context.WebSockets.IsWebSocketRequest)
    {
        var socket = await context.WebSockets.AcceptWebSocketAsync();
        // handle socket here
    }
    else
    {
        await next();
    }
});

Once the socket is accepted, you can send and receive messages using the WebSocket class. Working with WebSockets is a bit lower-level than working with SignalR, but the benefit is that you stay in full control of how messages are structured and transmitted.

If you need a higher-level abstraction for real-time messaging, SignalR builds on the same underlying WebSocket support and provides fallback transports when WebSockets are not available. But for custom scenarios or lightweight protocols, the built-in WebSocket middleware does the job well.

Happy networking!