.NET8 webapi 使用 WebSocket 通信

2 篇文章 0 订阅
2 篇文章 0 订阅

1. 安装SignalR NuGet包

首先,需要安装SignalR库。在NuGet包中搜索Microsoft.AspNetCore.SignalR.Common并安装

2. 创建一个SignalR Hub

在您的ASP.NET Core应用程序中创建一个SignalR Hub类文件,用于处理WebSocket连接和消息传递。SignalR Hub是负责处理客户端连接和消息的中心枢纽。以下是一个简单的SignalR Hub示例:

using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
​
public class ChatHub : Hub
{
    public async Task SendToAll(string message)
    {
        // 将收到的消息广播给所有连接的客户端
        await Clients.All.SendAsync("ReceiveMessage", message);
    }
}

3. 配置Program.cs

// 添加Cors策略 允许所有源 
builder.Services.AddCors(options =>
{
    options.AddPolicy("MyCorsPolicy", builder =>
    {
        builder.SetIsOriginAllowed(origin => true)
               .AllowAnyHeader()
               .AllowAnyMethod()
               .AllowCredentials();
    });
});
​
// 添加SignalR服务
builder.Services.AddSignalR();
​
app.UseCors("MyCorsPolicy"); // 使用MyCorsPolicy
​
// 添加SignalR端点
app.UseEndpoints(endpoints =>
{
    _ = endpoints.MapHub<ChatHub>("/ChatHub");
});

4. 在控制器中触发SignalR消息

在您的消息控制器中,您可以通过注入IHubContext来触发SignalR消息,以便从控制器中将消息发送到所有连接的客户端。

namespace testMessage.Controllers
{
    [ApiController]
    [Route("[controller]/[action]")]
    public class MessageController : Controller
    {
​
        private readonly DataContext _context;
        private readonly IHubContext<SignalRHub> _hubContext;
​
        public MessageController(DataContext context, [FromServices] IHubContext<ChatHub> hubContext)
        {
            _context = context;
            _hubContext = hubContext;
        }
​
        [HttpGet]
        public async Task<ActionResult<List<Message>>> GetMessage()
        {
            var List = await _context.Message.ToListAsync();
            return Ok(List);
        }
​
        [HttpPost] 
        public async Task<IActionResult> AddMessage(Message msg)
        {
            
            if (ModelState.IsValid)
            {
                _context.Message.Add(msg); 
                await _context.SaveChangesAsync();
                // SignalR websocket 消息
                await _hubContext.Clients.All.SendAsync("ReceiveMessage", msg);
                // 返回成功消息 
                return Content("添加成功!", "text/plain");
            }
            else
            {
                // 如果模型状态无效,返回错误消息  
                return BadRequest("无效的请求数据。");
            }
        }
    }
}

5. 在前端建立WebSocket连接

最后,在前端代码中,您可以使用SignalR客户端库来建立WebSocket连接,并订阅来自服务端的消息。

以vue3项目为例 先通过npm安装 @microsoft/signalr

npm install @microsoft/signalr
import { HubConnectionBuilder } from '@microsoft/signalr';

const connection = new HubConnectionBuilder()
    .withUrl('https://localhost/ChatHub') // 你的接口地址/SignalR端点对应的地址
    .build();
​
connection.start()
    .then(() => {
      console.log('SignalR Connected');
    })
    .catch(err => console.error(err));
​
connection.on('ReceiveMessage', message => {
  console.log('Received message:', message); // 接受消息
});

通过上述步骤,可以实现在ASP.NET Core中处理前端WebSocket请求,并使用SignalR来构建实时的消息传递系统。当客户端发送或接收消息时,SignalR将帮助您管理WebSocket连接和消息传递。

希望这些信息对您有所帮助,如果存在不正确的地方还请指出。

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
.NET Core Web Api中,你可以使用SignalR来实现WebSocket通信。SignalR提供了一种简单的方式来处理WebSocket连接和消息的接收和发送,同时也支持其他传输协议,如Server-Sent Events和Long Polling。 要使用SignalR,你需要安装Microsoft.AspNetCore.SignalR包。你可以使用NuGet包管理器或在项目文件中手动添加依赖项。在安装完成后,你可以创建一个Hub类来处理WebSocket连接和消息的接收和发送。 例如,你可以创建一个名为ChatHub的类: ```csharp using Microsoft.AspNetCore.SignalR; using System.Threading.Tasks; public class ChatHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); } } ``` 在上面的代码中,SendMessage方法用于接收客户端发送的消息,并使用Clients.All.SendAsync方法向所有连接的客户端发送消息。ReceiveMessage是客户端用于接收消息的方法名称。 现在,你需要在Startup.cs文件中配置SignalR中间件。在ConfigureServices方法中,你需要添加SignalR服务: ```csharp services.AddSignalR(); ``` 在Configure方法中,你需要将SignalR中间件添加到请求管道中: ```csharp app.UseSignalR(routes => { routes.MapHub<ChatHub>("/chatHub"); }); ``` 在上面的代码中,/chatHub是WebSocket的URL路径,ChatHub是你创建的Hub类。 最后,在客户端中,你需要使用SignalR客户端库来连接到WebSocket,并使用on方法来接收服务器发送的数据。 例如,你可以使用如下代码连接到ChatHub: ```javascript import * as signalR from "@microsoft/signalr"; const connection = new signalR.HubConnectionBuilder() .withUrl("/chatHub") .build(); connection.start().then(() => { console.log("WebSocket connected"); }); export default connection; ``` 然后,你可以使用on方法接收服务器发送的数据: ```javascript import connection from "./connection"; connection.on("ReceiveMessage", (user, message) => { console.log(user + " says: " + message); }); ``` 这样,你就可以使用SignalR在.NET Core Web Api中配置WebSocket通信了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chelase

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值