Net Core MVC6 WebSockets中间件

时间:2016-06-13 13:18:39

标签: 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();

控制器

[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.....

本地主机:5000 / WS

GET HTTP/1.1: 
Host: localhost:5000/ws
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

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

非常感谢您的一些建议。

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

相关文章:Using WebSockets with ASP.NET Web API

我不知道它是否属实,但我认为应该通常使用websocket处理程序,而不是尝试使用api控制器。

0 个答案:

没有答案