Net Core MVC6 WebSockets中间件

pat*_*atS 5 c# asp.net asp.net-mvc websocket

首先,我知道SignalR是最好的websocket框架,我应该使用它而不是低级实现。

但是,是否有人知道如何在控制器中正确使用websocket?我完全绿了。

任何好的教程都将非常有帮助:)

我已经尝试过这样做。

中间件

 app.UseWebSockets();

 app.Use(async (context, next) =>
 {
        var http = (HttpContext)context;

        if (http.WebSockets.IsWebSocketRequest)
        {
         WebSocket webSocket = await http.WebSockets.AcceptWebSocketAsync();     
        }
         else
         {
            await next();
         }
 });
 //thanks to next(); app.UseMvc();
Run Code Online (Sandbox Code Playgroud)

控制者

[Route("ws")]
    public class MonitorController : Controller
    {
        HttpContext context;
        WebSocket socket;

        public MonitorController(IHttpContextAccessor accessor)
        {
            this.context = accessor.HttpContext;
            if (!this.context.WebSockets.IsWebSocketRequest)
                throw new InvalidOperationException("incoming request is not a websocket request");
        }

        [HttpGet]
        public IActionResult Get()
        {
            return new MonitorWaiter(Wait);
        }
        .... some code MonitorWaiter.....
Run Code Online (Sandbox Code Playgroud)

本地主机:5000 / ws

GET HTTP/1.1: 
Host: localhost:5000/ws
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Run Code Online (Sandbox Code Playgroud)

在调试过程中,它进入中间件,但它跳过控制器。

非常感谢您的一些建议。


我看到可以通过将服务器添加到处理程序-> app.Use(); 来完成。并在控制器中使用一些客户端实现,但是问题仍然是当我要创建一些服务器时会发生什么?


相关文章:将WebSockets与ASP.NET Web API一起使用

我不知道这是否正确,但我认为通常应使用websocket处理程序,而不要尝试使用api控制器。