.Net Core SignalR 不能在启动时添加或使用

Jso*_*ham 5 c# signalr .net-core

我最近回到了一个使用 SignalR 的旧 .Net Core 应用程序。

我认为当时唯一可用于 .Net Core 应用程序的 SignalR NuGet 包是预览版。它奏效了。

我现在在一台新机器上,不知道这个包的预览源是什么,所以我卸载了它并安装了这个:

> Install-Package Microsoft.AspNet.SignalR.Core -Version 2.4.1
Run Code Online (Sandbox Code Playgroud)

除了 Startup.cs 文件中的这两个错误之外,一切似乎都很好,但有一些命名空间更改。

错误 CS1061“IServiceCollection”不包含“AddSignalR”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的可访问扩展方法“AddSignalR”(您是否缺少 using 指令或程序集引用?)

错误 CS1061“IApplicationBuilder”不包含“UseSignalR”的定义,并且找不到接受“IApplicationBuilder”类型的第一个参数的可访问扩展方法“UseSignalR”(您是否缺少 using 指令或程序集引用?)

我环顾四周,除了有人建议您需要安装Microsoft.AspNetCore.SignalR.Http而我找不到之外,我没有太多可用的东西。其他人建议您需要安装它:

Install-Package Microsoft.AspNetCore.SignalR.Client -Version 1.1.0
Run Code Online (Sandbox Code Playgroud)

我已经尝试过,但错误仍然存​​在,我该如何消除这些错误?

在此处输入图片说明

use*_*881 22

我通过替换代码解决了这个问题

app.UseSignalR(routes =>
        {
            routes.MapHub<NotifyHub>("notify"); 
        });
Run Code Online (Sandbox Code Playgroud)

app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<NotifyHub>("/notify");
        });
Run Code Online (Sandbox Code Playgroud)

我正在使用点网 5.0

  • 保护你!这也对我有用! (2认同)
  • 谢谢。是的。如果您使用 .net 5,这是一个有效的解决方案 (2认同)

Mal*_*nko 18

正如@Farman 已经指出的,解决方案是使用.UseEndpoints(). 正如 MSFT 所记录的,这是推荐的方法,将.UseSignalR(),

推荐方法:

app.UseEndpoints(endpoints =>
{
    endpoints.MapHub<SomeHub>("/path");
});
Run Code Online (Sandbox Code Playgroud)

从 .NET Core 版本 3.0 开始,它.UseSignalR()已过时,建议开始.UseEndpoints()使用 .NET Core 版本 3.1。

更多信息可参见AspNet Core兼容性


mm8*_*mm8 7

Microsoft.AspNetCore.SignalR自 2.1 起成为 ASP.NET Core 的一部分。

因此,如果您在 Visual Studio 中的“项目”->“属性”->“目标框架”下将目标版本设置为 NET Core 2.1 或更高版本,则应该能够调用您的services.AddSignalR()方法ConfigureServices