webapi添加添加websocket中间件
添加位置
我按照MSDN的例子添加了一个复述客户端响应的中间件。需要注意的时,中间件采用那种方式添加,添加在哪。
- 哪种方式
我选择创建一条管道分支,只要时ws的连接请求,就转到这个分支
因此,我们需要使用的是MapWhen()来创建管道分支。 - 添加在哪
要注意授权的问题,所以应该添加到授权中间件之后,也就是UseAuthorization()之后。
至于是放在终结点之后,还是终结点之前,我认为都可以。
请求识别
添加websocket连接阶段也是采用的http请求,因此在添加webservice中间件之前,需要添加UseWebSockets()来识别ws请求。
这个中间件能够将context.WebSockets.IsWebSocketRequest变成true。而这个属性用来识别ws请求。
添加websocket中间件
我们在管道分支处判断一下这个请求是不是ws请求,是的话就进入分支app.MapWhen(c=>c.WebSockets.IsWebSocketRequest, appbuilder =>{})
/创建websocket管道分支,只有websocket连接请求进入这条分支
app.MapWhen(c=>c.WebSockets.IsWebSocketRequest, appbuilder =>
{
//websocket连接授权中间件
appbuilder.Use(async (context, next) =>
{
if (context.User.Identity.IsAuthenticated == false)
{
context.Response.StatusCode = StatusCodes.Status403Forbidden;
}
else
{
await next(context);
}
});
//websocket连接建立中间件
appbuilder.Use(async (context,next) =>
{
await next(context);
//此方法将 TCP 连接升级到 WebSocket 连接,并提供 WebSocket 对象
using (var websocket = await context.WebSockets.AcceptWebSocketAsync())
{
var buffer = new byte[1024 * 4];
//阻塞式调用,接收到消息才会退出,同时把消息写到buffer中
var reciveResult = await websocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
while (!websocket.CloseStatus.HasValue)
{
//复述客户端消息并发回
await websocket.SendAsync(new ArraySegment<byte>(buffer, 0, reciveResult.Count),
reciveResult.MessageType,
reciveResult.EndOfMessage,
CancellationToken.None);
reciveResult = await websocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
}
await websocket.CloseAsync(
reciveResult.CloseStatus!.Value,
reciveResult.CloseStatusDescription,
CancellationToken.None);
}
});
});
当然我socket连接之前还添加了一个授权的中间件,如果不需要可以直接去除。
测试

由于我加了授权,所以这里还要加上请求头。如果没有授权就不需要加了。

可以看到,服务器复述了消息。
webapi添加添加websocket中间件的更多相关文章
- h5 页面点击添加添加input框
h5 页面点击添加添加input框 前段时间有个需求,页面要能点击添加按钮控制input框的个数,当时感觉有点难,就没做,这两个又遇到了,没办法写了个简单的 效果图,加号增加,减号减少 直接上代码, ...
- 万能分布式消费框架,添加基于redis中间件的方式。
框架目的是分布式调度起一切任何函数(当然也包括调度起一切任何方法). 之前写的是基于rabbitmq的,作为专用的消息队列好处比redis的list结构好很多.但有的人还是强烈喜欢用redis,以及r ...
- ASP.Net WebAPI中添加helppage帮助页面
一.自动创建带帮助的WebAPI 1.首先创建项目的时候选择WebAPI,如下图所示,生成的项目会自动生成帮助文档. 2.设置调用XML文档的代码 3.设置项目注释XML文档生成目录,项目——属性—— ...
- WebAPI项目添加定时服务
开发平台: VS2019 背景: 在开发小程序的API服务的时候,由于access_token的有效期为7200秒,也就是2小时,这就需要后端定时的去更新这个access_token,便于调用小程序的 ...
- dotnet webapi 中添加Swagger文档
首先添加"SwaggerGenerator": "1.1.0","SwaggerUi": "1.1.0" 需要注意的是这 ...
- autoMapper dotnetcore webapi 自动添加映射 abp
在ef的xxxxApplicationModule的Initialize方法中,已经添加了自动映射的配置,如下图: 写的很明白了,我们只需要写一个类继承Profile就可以了.如下图所示: 这样就可以 ...
- webAPI过滤器添加参数签名
项目需求: 接口对安卓和IOS开发接口,需要房子用户窜改数据请求接口.添加sign签名校验参数. 代码如下:加上特性标签就可以控制部分接口验证 public class SignAuthorizeFi ...
- 为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_67 websocket是个啥? webSocket是一种在单个TCP连接上进行全双工通信的协议 webSocket使得客户端和服务 ...
- ASP.NET Core WebApi AspNetCoreRateLimit 限流中间件学习
AspNetCoreRateLimit介绍: AspNetCoreRateLimit是ASP.NET核心速率限制框架,能够对WebApi,Mvc中控制限流,AspNetCoreRateLimit包包含 ...
- asp.net core系列 37 WebAPI 使用OpenAPI (swagger)中间件
一.概述 在使用Web API时,对于开发人员来说,了解其各种方法可能是一项挑战.在ASP.NET Core上,Web api 辅助工具介绍二个中间件,包括:Swashbuckle和NSwag .NE ...
随机推荐
- 全平台GPU通用AI视频补帧超分教程
全平台GPU通用AI视频补帧超分教程 本教程只发布于https://www.cnblogs.com/Icys 注意:本教程需要一定的命令行和视频编码知识,请谨慎食用. 软件准备 realcugan-n ...
- HMS Core手语服务荣获2022中国互联网大会“特别推荐案例”:助力建设数字社会
11月15日,HMS Core手语服务在2022(第二十一届)中国互联网大会 "互联网助力经济社会数字化转型"案例评选活动中,荣获"特别推荐案例". 经过一年多 ...
- 攻防世界 debug
题目 分析过程 丢到PE里面 一开始,我看到下面的脱壳提示,以为是我没见过的壳,下载了相关工具脱壳--发现脱了后又出现没见过的脱壳提示,根据提示脱壳弄出来的东西怪怪的 卡题,查了资料 学到一个新知识点 ...
- TensorRT C# API 项目更新 (1):支持动态Bath输入模型推理
1. 项目介绍 NVIDIA TensorRT 是一款用于高性能深度学习推理的 SDK,包括深度学习推理优化器和运行时,可为推理应用程序提供低延迟和高吞吐量.基于 NVIDIA TensorRT ...
- 知识图谱增强的KG-RAG框架
昨天我们聊到KG在RAG中如何发挥作用,今天我们来看一个具体的例子. 我们找到一篇论文: https://arxiv.org/abs/2311.17330 ,论文的研究人员开发了一种名为知识图谱增强的 ...
- 算是不常用的东西,java中的ResultSet转List
import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import j ...
- 微信小程序,本地和真机测试都是好的,但体验版扫码显示空白页
大概率是缓存导致的,删除掉你手机上的小程序[开发版] 和 [体验版],然后再扫码进入体验版就好了.
- 一些奇奇怪怪的js知识
0.关于前端为什么typeof null 得到的结果是 object 对于 null 来说,很多人会认为他是个对象类型,其实这是错误的. 虽然 `typeof null` 会输出 `object`,但 ...
- Spark SQL 抽样函数 ——TABLESAMPLE 的坑点
最近需要实现一段 Spark SQL 逻辑,对数据集进行抽样指定的行数. 由于数据集较大,刚开始的逻辑是,取窗口函数随机排序后 row_number 的前 n 行.但运行速度较慢,所以想起了 TABL ...
- 【笔记】Oracle 窗口函数
Oracle 窗口函数 简单来说,窗口函数是分析函数的一种,通常可以理解成over()函数 构成:函数名①() over(partition by 分组的列名 order by 排序的列名 XXX) ...