public void Configure( IApplicationBuilder app, IWebHostEnvironment env, IWebSocketHandler webSocketHandler, IServiceScopeFactory serviceScopeFactory ) { _webSocketHandler = webSocketHandler; if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Communicator v1")); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseSession(); app.UseWebSockets(); app.Use(async(context, next) => { if (context.Request.Path == "/ws") { if (context.WebSockets.IsWebSocketRequest) { using var scope = serviceScopeFactory.CreateScope(); var db = scope.ServiceProvider.GetService <CommunicatorDbContex>(); WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); await _webSocketHandler.Handle(context.Session, webSocket, new Service(db)); } else { context.Response.StatusCode = 400; } } else { await next(); } }); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }