IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> .net core webapi 3.1+signalR实现通信过程 -> 正文阅读

[开发测试].net core webapi 3.1+signalR实现通信过程

实现思路使用postman调用api发送消息并且前端页面能接受到消息。

一、服务端

1 创建api项目这个就不说了

2 引用signalR nuget直接搜signalr 安装上就行

3 后台代码 创建ChatHub类 继承Hub? 注意标记的名称 到时候需要和前端的方法名称要保持一致的

?

?代码:

public class ChatHub:Hub
? ? {
? ? ? ? public async Task Send(string message)
? ? ? ? {
? ? ? ? ? ? if(Clients!=null)
? ? ? ? ? ? await Clients.All.SendAsync("SendAsync", message);
? ? ? ? }

? ? ? ? public override Task OnConnectedAsync()
? ? ? ? {
? ? ? ? ? ? return base.OnConnectedAsync();
? ? ? ? }
? ? ? ? public override Task OnDisconnectedAsync(Exception exception)
? ? ? ? {
? ? ? ? ? ? return base.OnDisconnectedAsync(exception);
? ? ? ? }
? ? ??
? ? }

4 、配置startup跨域问题? 3.1和2.2不一样? 而且3.1比2.2貌似更繁琐

startup? configureservices

services.AddCors(op => { op.AddPolicy("cors", set => { set.SetIsOriginAllowed(origin => true).AllowAnyHeader().AllowAnyMethod().AllowCredentials(); }); });

Configure中? 需要注意一下位置??

自己写一个api调用chathub?

endpoints.MapHub<ChatHub>("api/WeatherForecast/SendMsg");

5 为了方便实现api和前端实现? 写了一个接口

??[Route("api/WeatherForecast/SendMsg")]
? ? ? ? [HttpPost]
? ? ? ? public async Task<dynamic> SendMsg(string msg)
? ? ? ? {
? ? ? ? ? ? await _hub.Send(msg);
? ? ? ? ? ? return new { code = 1123, msg = true };
? ? ? ? }

?到此服务端代码就到一段落。接下来看前端代码

二 前端实现? 框架asp.net core web? 3.1

? ? 1 引入signalRjs文件? ?

在创建好的项目上? 右键》添加》选择客户端库??

?前端代码??

<div class="container">
? ? <div class="row"> </div>
? ? <div class="row">
? ? ? ? <div class="col-2">用户名</div>
? ? ? ? <div class="col-4"><input type="text" id="userInput" /></div>
? ? </div>
? ? <div class="row">
? ? ? ? <div class="col-2">要发送的消息</div>
? ? ? ? <div class="col-4"><input type="text" id="messageInput" /></div>
? ? </div>
? ? <div class="row">
? ? </div>
? ? <div class="row">
? ? ? ? <div class="col-6">
? ? ? ? ? ? <input type="button" id="sendButton" value="发送消息" />
? ? ? ? </div>
? ? </div>
</div>
<div class="row">
? ? <div class="col-12">
? ? ? ? <hr />
? ? </div>
</div>
<div class="row">
? ? <div class="col-6">
? ? ? ? <ul id="messagesList"></ul>
? ? </div>
</div>
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/microsoft/signalr/dist/browser/signalr.min.js"></script>

<script>
? ? var connection = new signalR.HubConnectionBuilder().withUrl("http://localhost:25379/api/WeatherForecast/SendMsg").build();
? ? //Disable send button until connection is establisheddocument.getElementById("sendButton").disabled = true;
? ? connection.serverTimeoutInMilliseconds = 24e4;
? ? connection.keepAliveIntervalInMilliseconds = 12e4;
? ? //接受消息
? ? connection.on("SendAsync", function ( message) {
? ? ? ? debugger;
? ? ? ? var msg = message;
? ? ? ? var encodedMsg = " says " + msg + "\n来源是";
? ? ? ? var li = document.createElement("li");
? ? ? ? li.textContent = encodedMsg;
? ? ? ? document.getElementById("messagesList").appendChild(li);
? ? });
? ? connection.start().then(function () {
? ? ? ? document.getElementById("sendButton").disabled = false;
? ? }).catch(function (err) {
? ? ? ? return console.error(err.toString());
? ? });
? ? document.getElementById("sendButton").addEventListener("click", function (event) {
? ? ? ? var user = document.getElementById("userInput").value;
? ? ? ? var message = document.getElementById("messageInput").value;
? ? ? ? //和服务器必须一致
? ? ? ? connection.invoke("Send", message).catch(function (err) {
? ? ? ? ? ? return console.error(err.toString());
? ? ? ? });
? ? ? ? event.preventDefault();
? ? });
</script>

创建signalR链接? 注意一致

最后结果:自己发送消息? 以及使用postman发送消息? html均可获得响应

特别鸣谢:我的同事 我的好大哥? 闫x

?

?

?

?

?

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:25:12  更:2022-02-16 13:26:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:27:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码