This Video之后,我实现了一个简单的SignalR.我在我的Program.cs类中添加了它的依赖项builder.Services.AddSignalR();.然后将 map 添加到我的CustomHub中,如下所示:app.MapHub<PublicChatHub>("public-chat");

这里是我的中心班级

using Microsoft.AspNetCore.SignalR;

namespace WebAPI.SignalR;

public sealed class PublicChatHub : Hub
{
    public override async Task OnConnectedAsync()
    {
        await Clients.All.SendAsync("ReceiveMessage", $"{Context.ConnectionId} connected.");
    }

    public async Task SendMessage(string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", message);
    }

    public override async Task OnDisconnectedAsync(Exception? exception)
    {
        await Clients.All.SendAsync("ReceiveMessage", $"{Context.ConnectionId} disconnected.");
    }
}

当我try 通过postman 连接套接字成功呼叫wss://localhost:7142/public-chat,但代码未命中OnConnectedAsync()上的断点时.

在连接后发送此消息:

{
   "protocol": "json,
   "version": 1
}�

�为0x1E ASCII.

推荐答案

postman 客户

对于我的主要问题,我无法通过postman通过网络插座访问我的集线器,我发现我的�实际上不是0x1E ASCII或类似的东西.在this link号上,我找到了一个和我的相似的身体模板,但结尾的字符不同.

使用以下内容更改了我的邮件正文:

{"protocol":"json","version":1}

(末尾应该是转义字符,无法发布,但您可以在顶部的链接上找到)

我的wss://localhost:7142/public-chat开始回应.


JS客户端

感谢Fatih,帮助解决了我的js客户端,运行时需要解决Live Servervscode扩展的问题,这就是CORS. 使用app.Cors();中间件作为服务解决了这个问题,这是

builder.Services.AddCors(options =>
{
options.AddPolicy("AllowAll",
    configure => configure.WithOrigins("http://localhost:5500") // your client 
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials()
);
});

并使用策略作为中间件:

app.UseCors("AllowAll");
app.MapHub<PublicChatHub>("/public-chat");

对于运行Live Server扩展名的js客户端,我的代码是:

 let connection = new signalR.HubConnectionBuilder()
.withUrl("https://localhost:7142/public-chat") // your server (check out http or https request)
.configureLogging(signalR.LogLevel.Information)
.build();

connection.start().then(function () {
console.log("connected");
}).catch(function (err) {
return console.error(err.toString());
});

connection.on("ReceiveMessage", function (message) {
console.log("Message received: " + message);
});

并用简单的html页面调用它.

<head>
    <script src="https://unpkg.com/@microsoft/signalr@latest/dist/browser/signalr.min.js"></script>
</head>

<body>
    <script src="index.js"></script>
</body>

毕竟,我的客户波斯曼德和js都经营得很成功.

Csharp相关问答推荐

Blazor:子编辑表单上的嵌套编辑表单验证

更改对象的旋转方向

如何在Reflection. Emit中使用具有运行时定义的类型参数的泛型类型

如何在C#中删除一个特殊字符,如"使用Regex"

Polly使用泛型重试和重试包装函数

使页面内容居中

Appsettings.json未加载.Net 8 Blaazor Web程序集

使用带有WithAppOnly()请求选项的pageIterator

在调整大小的控件上绘制

使用泛型可空类实现接口

NET8 Maui&;iOS:AppCenter崩溃错误

异步任务导致内存泄漏

在IAsyncEnumerable上先调用,然后跳过(1)可以吗?

如何在不复制或使用输出的情况下定义项目依赖

JsonPath在Newtonsoft.Json';S实现中的赋值

匿名类型的AbstractValidator

发布.NET 8 Blazor WebAssembly独立应用程序以进行静态站点部署

C#中类库项目的源代码生成器

如何正确地在VB中初始化类?

如何将 colored颜色 转换为KnownColor名称?