@@ -34,16 +34,22 @@ public static IEndpointConventionBuilder UseWebSocketRoute<TWebSocketRoute>(this
3434 where TWebSocketRoute : WebSocketRouteBase
3535 {
3636 app . ThrowIfNull ( ) ;
37- return app . MapGet ( route , HandleWebSocketRoute < TWebSocketRoute > ) ;
37+ return app . MapGet ( route , HandleDeferredWebSocketRoute < TWebSocketRoute > ) ;
3838 }
3939
40- private static async Task < IResult > HandleWebSocketRoute < TWebSocketRoute > ( HttpContext context , TWebSocketRoute route , ILogger < TWebSocketRoute > logger )
40+ private static DeferredWebSocketResult HandleDeferredWebSocketRoute < TWebSocketRoute > ( HttpContext context , TWebSocketRoute route , ILogger < TWebSocketRoute > logger )
41+ where TWebSocketRoute : WebSocketRouteBase
42+ {
43+ return new DeferredWebSocketResult ( route , HandleWebSocketRoute ( context , route , logger ) ) ;
44+ }
45+
46+ private static async Task HandleWebSocketRoute < TWebSocketRoute > ( HttpContext context , TWebSocketRoute route , ILogger < TWebSocketRoute > logger )
4147 where TWebSocketRoute : WebSocketRouteBase
4248 {
4349 if ( ! context . WebSockets . IsWebSocketRequest )
4450 {
4551 logger . LogError ( "WebSocket request expected" ) ;
46- return Results . BadRequest ( "WebSocket request expected" ) ;
52+ return ;
4753 }
4854
4955 var routeFilters = GetRouteFilters < TWebSocketRoute > ( context ) . ToList ( ) ;
@@ -64,22 +70,18 @@ private static async Task<IResult> HandleWebSocketRoute<TWebSocketRoute>(HttpCon
6470 {
6571 var processingTask = new Func < Task > ( ( ) => ProcessWebSocketRequest ( route , context ) ) ;
6672 await BeginProcessingPipeline ( actionExecutingContext , actionExecutedContext , processingTask ) ;
67- return Results . Empty ;
6873 }
6974 catch ( WebSocketException ex ) when ( ex . WebSocketErrorCode == WebSocketError . ConnectionClosedPrematurely )
7075 {
7176 logger . LogInformation ( "Websocket closed prematurely. Marking as closed" ) ;
72- return Results . Empty ;
7377 }
7478 catch ( OperationCanceledException )
7579 {
7680 logger . LogInformation ( "Websocket closed prematurely. Marking as closed" ) ;
77- return Results . Empty ;
7881 }
7982 catch ( Exception ex )
8083 {
8184 logger . LogError ( ex , "Encountered exception while handling websocket. Closing" ) ;
82- return Results . Empty ;
8385 }
8486 finally
8587 {
0 commit comments