AspNetCore3.0 WebApi+SignalR 实现通信

第一步:创建webapi项目
第二部:浏览NuGet 搜索Microsoft.AspNetCore.SignalR安装
在这里插入图片描述
第三步:新建Hub类

public class ChatHub : Hub
    {
        /// <summary>
        /// SendMsg用于前端调用
        /// </summary>
        /// <param name="json">此处我传入的json字符串,可根据自己需求修改</param>
        /// <returns></returns>
        public Task SendMsg(string json)
        {
            JObject jObj = JObject.Parse(json);
            //通过属性名或者索引来访问,仅仅是自己的属性名,而不是所有的
            JToken UserNameToken = jObj["UserName"];
            JToken MessageToken = jObj["Message"];
            //在客户端实现此处的Show方法
            return Clients.All.SendAsync("Show", UserNameToken.ToString()+":"+MessageToken.ToString());
        }
    }

第四部:配置Startup
1.配置ConfigureServices(注意:3.0中跨域不允许“*”,所以必须配置你的web地址)

//跨域
            services.AddCors(options =>
            {
                options.AddPolicy("SignalRCors",
                    policy => policy
                                    .AllowAnyHeader()
                                    .AllowAnyMethod()
                                    .WithOrigins("http://localhost:52000")
                                    .AllowCredentials()); ;
            });
            services.AddSignalR();

2.配置Configure

app.UseCors("SignalRCors");

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();

                endpoints.MapHub<ChatHub>("/chathub");
            });

第五步:html
注意:html必须部署起来 部署后的地址填入WithOrigins中

<!DOCTYPE html>
<html>
	<head>
		<title></title>
	</head>
	<body>
		<input type="text" id="userid" placeholder="Enter user name" />
		<br>
		<input type="text" id="message" placeholder="Enter sned message" />
		<input type="button" id="btnSend" value="Send" />
		<ul id="msglist"></ul>
		<script type="text/javascript" src="js/jquery.min.js"></script>
		<script type="text/javascript" src="js/signalr.min.js"></script>
		<script>
			$(function() {
				var hubConnection = new signalR.HubConnectionBuilder().withUrl("http://localhost:52000/chatHub").build();
				$("#btnSend").click(function() {
					//新建对象
					var obj = {};
					obj["UserName"] = $('#userid').val();
					obj["Message"] = $('#message').val();
					//调用服务器方法
					hubConnection.invoke('SendMsg', JSON.stringify(obj));
				});

				//服务器回调方法
				hubConnection.on('Show', data => {
					$('#msglist').append($('<li>').text(data));
				});

				hubConnection.start();
			});
		</script>
	</body>
</html>

第六步:signalr.js的由来
1.在“解决方案资源管理器” 中,右键单击项目,然后选择“添加” >“客户端库” 。
2.在“添加客户端库” 对话框中,对于“提供程序” ,选择“unpkg” 。
3.对于“库” ,输入 @microsoft/signalr@latest。
4.选择“选择特定文件” ,展开“dist/browser” 文件夹,然后选择“signalr.js” 和“signalr.min.js”
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值