diff --git a/src/WireMock.Net.Minimal/Owin/WireMockMiddleware.cs b/src/WireMock.Net.Minimal/Owin/WireMockMiddleware.cs index 790a352e..fd90bda5 100644 --- a/src/WireMock.Net.Minimal/Owin/WireMockMiddleware.cs +++ b/src/WireMock.Net.Minimal/Owin/WireMockMiddleware.cs @@ -28,6 +28,8 @@ using Next = Microsoft.Owin.OwinMiddleware; using OwinMiddleware = System.Object; using IContext = Microsoft.AspNetCore.Http.HttpContext; using Next = Microsoft.AspNetCore.Http.RequestDelegate; +using HandlebarsDotNet; +using WireMock.Org.Abstractions; #endif namespace WireMock.Owin @@ -169,6 +171,20 @@ namespace WireMock.Owin return; } +#if USE_ASPNETCORE && NET8_0_OR_GREATER + if (ctx.WebSockets.IsWebSocketRequest) + { + // Accept WebSocket upgrade + var webSocket = await ctx.WebSockets.AcceptWebSocketAsync(); + + // Get and invoke handler + var provider = targetMapping.Provider as WireMock.WebSockets.ResponseProviders.WebSocketResponseProvider; + await provider.HandleWebSocketAsync(webSocket, request); + + return; // Don't process as HTTP + } +#endif + logRequest = targetMapping.LogMapping; if (targetMapping.IsAdminInterface && _options.AuthenticationMatcher != null && request.Headers != null) diff --git a/src/WireMock.Net.WebSockets/ResponseProviders/WebSocketResponseProvider.cs b/src/WireMock.Net.WebSockets/ResponseProviders/WebSocketResponseProvider.cs index 0114b495..d1cae943 100644 --- a/src/WireMock.Net.WebSockets/ResponseProviders/WebSocketResponseProvider.cs +++ b/src/WireMock.Net.WebSockets/ResponseProviders/WebSocketResponseProvider.cs @@ -16,7 +16,7 @@ namespace WireMock.WebSockets.ResponseProviders; /// /// Response provider for handling WebSocket connections. /// -internal class WebSocketResponseProvider : IResponseProvider +public class WebSocketResponseProvider : IResponseProvider { private readonly Func? _handler; private readonly Func>? _messageHandler; diff --git a/test/WireMock.Net.Tests/WebSockets/WebSocketTests.cs b/test/WireMock.Net.Tests/WebSockets/WebSocketTests.cs index b567b9d7..e67b61cf 100644 --- a/test/WireMock.Net.Tests/WebSockets/WebSocketTests.cs +++ b/test/WireMock.Net.Tests/WebSockets/WebSocketTests.cs @@ -59,7 +59,7 @@ public class WebSocketTests // Act using var client = new ClientWebSocket(); await client.ConnectAsync( - new Uri($"ws://localhost:{server.Port}/echo"), + new Uri($"ws://{server.Url}/echo"), CancellationToken.None); var message = Encoding.UTF8.GetBytes("Hello WebSocket!");