asp.net core webapi signalR通信

2023-10-26 08:45
文章标签 core 通信 asp net webapi signalr

本文主要是介绍asp.net core webapi signalR通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.前端使用npm 导入signalR的包和jquery包
npm install jquery -y
npm install @micosoft/signalr -y

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>实时通讯</title><h1>signalr入门</h1>
</head>
<body><input type="button" value="发送" id="btnSend">
</body>
</html>
<script src="node_modules/jquery/dist/jquery.min.js"></script>
<script src="node_modules/@microsoft/signalr/dist/browser/signalr.min.js"></script>
<script>//创建连接对象var connection=new signalR.HubConnectionBuilder().withUrl("https://localhost:7177/myHub").build();
//当连接成功时
connection.start().then(function(){console.log("客户端连接成功");
})
//接收服务端主动推送过来的消息
connection.on("ReceiveMsg",function(msg){
alert(msg)
})
connection.on("completeOrder",function(msg){
alert(msg)
})
$("#btnSend").click(function(){
//客户端主动调用服务定义的通讯方法
connection.invoke("SendMsg",1,"测试").catch(function(err){
console.log(err)
})
})
</script>

后端–program中注入signalR的服务和跨域服务

 builder.Services.AddSignalR();//配置跨域builder.Services.AddCors(opt =>{opt.AddPolicy("ws.client", p =>{p.AllowCredentials();p.AllowAnyHeader();p.AllowAnyMethod();p.SetIsOriginAllowed(s => true);});});......app.MapHub<MyHub>("/myHub");app.UseCors("ws.client");

新建一个hub类

using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Caching.Memory;namespace WebApplication1.Hubs
{public class MyHub : Hub{private readonly IMemoryCache _memoryCache;public MyHub(IMemoryCache memoryCache){_memoryCache = memoryCache;}//当客户端成功连接时,会触发的方法public override Task OnConnectedAsync(){var cacheKey = "items_1";var cacheEntryOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes(30));_memoryCache.Set(cacheKey, Context.ConnectionId, cacheEntryOptions);return Task.CompletedTask;}//当客户端断开连接时,需要触发的方法public override Task OnDisconnectedAsync(Exception? exception){_memoryCache.Remove("items_1");return Task.CompletedTask;}public async void SendMsg(long userId, string msg){string sendMsg = $"服务端收到了客户端的消息,参数user={userId},msg={msg}";//服务端主动推送消息给所有的客户端//await Clients.All.SendAsync("ReceiveMsg", sendMsg);//给除了自己以外的所有客户端发送消息await Clients.Others.SendAsync("ReceiveMsg", sendMsg);}}
}

控制器类

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Caching.Memory;
using WebApplication1.Hubs;namespace WebApplication1.Controllers
{[ApiController][Route("[controller]/[action]")]public class WeatherForecastController : ControllerBase{private readonly IMemoryCache _memoryCache;private readonly IHubContext<MyHub> _hubContext;private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};private readonly ILogger<WeatherForecastController> _logger;public WeatherForecastController(ILogger<WeatherForecastController> logger, IMemoryCache memoryCache, IHubContext<MyHub> hubContext){_logger = logger;_memoryCache = memoryCache;_hubContext = hubContext;}[HttpGet(Name = "GetWeatherForecast")]public IEnumerable<WeatherForecast> Get(){return Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = Random.Shared.Next(-20, 55),Summary = Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray();}[HttpPost]public void AddOrder(){var connectionId = _memoryCache.Get("items_1").ToString();//服务端向指定客户端发送信息。_hubContext.Clients.Client(connectionId).SendAsync("completeOrder", "订单完成");}}
}

这篇关于asp.net core webapi signalR通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/285509

相关文章

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

C++编程:ZeroMQ进程间(订阅-发布)通信配置优化

文章目录 0. 概述1. 发布者同步发送(pub)与订阅者异步接收(sub)示例代码可能的副作用: 2. 适度增加缓存和队列示例代码副作用: 3. 动态的IPC通道管理示例代码副作用: 4. 接收消息的超时设置示例代码副作用: 5. 增加I/O线程数量示例代码副作用: 6. 异步消息发送(使用`dontwait`标志)示例代码副作用: 7. 其他可以考虑的优化项7.1 立即发送(ZMQ_IM

.NET 自定义过滤器 - ActionFilterAttribute

这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误,并返回一个 BadRequest 响应。 代码片段: /// <summary>/// 验证 ModelState 是否有效/// </