Asp SignalR跨域实例WebApi+js

1 篇文章 0 订阅
1 篇文章 0 订阅

准备

前段时间因为公司项目要用到SignaIR,我研究了半天,才成功推送消息到客户端。发现跨域其实也很简单,后面我会附上Dome链接。

环境

我这里用的是 :
1.vs 2019
2.WEB ASP窗体
3. ASP WebAPi

安装NuGet程序包

首先导入NuGet程序包 工具—NuGet程序包管理
webAPI程序:
1.Microsoft.AspNet.SignalR
2.Microsoft.Owin.Cors (注:解决JS跨域问题)
如何需要webAPI 跨域请安装Microsoft ASP.NET.WebAPI.Cors (但请注意跨域的优先级)
ASP 窗体
1.Microsoft.AspNet.SignalR.JS (注:单独安装SignalR.JS即可)

代码块

WebApi端(代码)

1.创建配置OWIN Startup应用程序类

2.Startup应用程序配置
app.UseCors 将CORS中间件添加到web应用程序管道中以允许跨域。
app.MapSignalR 将 SignalR 集线器映射到“/signalr”处的应用生成器管道。

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // 有关如何配置应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkID=316888
            //允许跨域
             app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR("/chatHub", new HubConfiguration());
            //自己设定访问路径,同时设置Hub配置项,无需指定启动的Hub类,因为它们被自动识别
        }
    }

3.创建Hub集线器 它提供与所连接的SignalR进行通信的方法

    [HubName(hubName:"chatHub")]
    public class ChatHub : Hub
    {
        public void Hello()
        {
            Clients.All.hello("你好");
        }
    }

4.WebApi 服务代码
为了方便webAPi 方便调用 SignalR 进行通信把消息推送到web端。新建一个类,我这里类名为BaseApiController,上代码:

    public class BaseApiController<T> : ApiController where T : Hub
    {
        protected IHubConnectionContext<dynamic> Clients { set; get; }

        protected IGroupManager Groups { set; get; }

        protected BaseApiController()
        {
            var context = GlobalHost.ConnectionManager.GetHubContext<T>();
            Clients = context.Clients;
            Groups = context.Groups;
        }
    }

1.IHubConnectionContext Hub 所有连接信息接口
2.GetHubContext 获取Hub 连接的上下文
5.WebAPI调用

    public class ValuesController : BaseApiController<ChatHub>
    {
        // GET api/values
        public string Get()
        {
            Clients.All.hello("webAPI 数据:这是跨域");
            
            return "Hello";
        }

    }

当有请求进入Get 方法,信息会发送到所有有连接的客户端, hello 为客户端创建方法。

ASP 客户端(代码)

    <script src="Scripts/jquery.signalR-2.4.1.min.js"></script>
    <script type="text/javascript">
        jQuery.support.cors = true;
        $(function () {
            var connection = $.hubConnection("https://localhost:44368/chatHub");//根据设置好的映射路径创建连接
            var proxy = connection.createHubProxy("chatHub");//根据连接创建我们需要访问的hub代理。chatHub这里是之前创建好的chathub类
            connection.start(function () {
                //调用服务端方法
                proxy.invoke("hello");//调用chatHub中hello方法
            });
            //为客户端创建方法,这里hello 是webAPi发送指定方法
            proxy.on("hello", function (msg) {
                alert(msg);
            });
        })
    </script>

为了方便大家观看我就不把注释单独拿出来讲解了。

JS代码很少,但要注意看代码注释

SignalR跨域支持 到此结束。。

希望大家 :学之所用 用其所学

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值