美文网首页
asp.net webapi使用signalR 前后端分离方案

asp.net webapi使用signalR 前后端分离方案

作者: wwmin_ | 来源:发表于2019-10-31 17:49 被阅读0次

最近在维护一个稍老一些的项目,项目当时使用webapi2写的,但是并没有用上及时推送功能,现在要加上,只好在老的项目基础上做文章,目前市面上asp.net webapi的signalr的前后端分离方案不是很多,质量也不敢保证,经过一番研究,总算走通了.把简单的实现放到这里,为自己和后面的人铺好路.

安装nuget包
Microsoft.AspNet.SignalR
配置startup
Startup 应用signalR
写一个hub
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

namespace lingcheng_web_api.SignalR
{
    [HubName("RepairHub")]
    public class RepairHub : Hub
    {
        public void Hello()
        {
            Clients.All.hello();
        }

        public void Send(string message)
        {
            var name = Guid.NewGuid().ToString().ToUpper();
            Clients.All.SendMessage(name, message);
        }

        public void showMessage(object message)
        {
            Clients.All.SendMessage(message.ToString());
        }
     
    }
}
在controller中使用
        /// <summary>
        /// 触发hub的api
        /// </summary>
        /// <param name="request">request</param>
        /// <returns>message</returns>
        [AllowAnonymous]
        [Route("show/hub"), HttpGet]
        public HttpResponseMessage GetMessage(HttpRequestMessage request)
        {
               var hub = GlobalHost.ConnectionManager.GetHubContext<RepairHub>();
                //注意这里的showMessage 就是对RepairHub下定义的showMessage方法调用,同样前端也是调用这个方法
                hub.Clients.All.showMessage("这里面可以放入任意对象,前台可以收到此内容");
                return request.CreateResponse(HttpStatusCode.OK,);
        }

api端就完成了,

处理web端
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>signalr</title>
    <script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.js"></script>
    <script src="https://cdn.bootcss.com/signalr.js/2.4.0-preview1-20180920-03/jquery.signalR.min.js"></script>
    <script src="./signalr/hubs"></script>
    <script>
        $(function () {
            $.connection.hub.url = "./signalr";
            var hub=$.connection.RepairHub;
            //此处的showMessage就是api端hub里定义的showMessage方法
            hub.client.showMessage = function (msg) {
                console.log(msg)
            }
            //日志输出
            $.connection.hub.logging= true;
            $.connection.hub.start();
        });
    </script>
</head>

<body>
    <div>signalr</div>
</body>

</html>

将此页面放到api项目的启动根目录下,项目启动访问该页面即可
注意因为没有做cors跨域处理,放到别的url下会出错.如果要做跨域处理,可以在startup中加入

app.UseCors(CorsOptions.AllowAll);

不知为何我的项目就是不识别这段代码,如有哪位大佬知道为何,烦劳写在评论里,为他人借鉴,谢谢

效果:
signalr web端接收数据
总结

首先安装signalR包,然后再webapi的startup配置,编写hub总线,最后在controller中调用处理.
前端(web)应用必要文件jquery.js,signalr.js以及weibapi中signalr动态生成的hubs文件, 然后连接hub,对hub的调用方法监听即可.signalr还有很多其他的高级用法,就需要参照官方文档及api文档去使用了.

相关文章

网友评论

      本文标题:asp.net webapi使用signalR 前后端分离方案

      本文链接:https://www.haomeiwen.com/subject/pumtbctx.html