You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向.NET 6 Web API添加SignalR,.NET Framework4.8 WinForms连接时Hub找不到

问题分析与解决方案

你的404错误根源在于客户端使用的SignalR版本与服务器端不兼容,同时连接路径配置错误,具体如下:

核心问题

服务器端使用的是ASP.NET Core SignalR(从services.AddSignalR()和endpoints.MapHub<CucinaHub>("/cucinahub")可以判断),但客户端代码用的是旧版ASP.NET SignalR的API(HubConnection构造函数、CreateHubProxy方法),这两个版本完全不兼容:

  • 旧版SignalR客户端会自动在连接路径后追加/signalr/negotiate(对应你日志里的http://localhost:5000/api/signalr/negotiate),而ASP.NET Core SignalR的协商路径是直接绑定到Hub的路径(即/cucinahub/negotiate)。
  • 旧版的CreateHubProxy方法在Core SignalR客户端中已被移除,API逻辑完全不同。

修复步骤

1. 更换客户端NuGet包

卸载旧版的Microsoft.AspNet.SignalR.Client,安装ASP.NET Core SignalR客户端包:

Install-Package Microsoft.AspNetCore.SignalR.Client

2. 修改客户端连接代码

替换原有的连接逻辑,使用Core SignalR的HubConnectionBuilder:

// 直接指向服务器端配置的Hub路径,无需追加/api
_signalRConnection = new HubConnectionBuilder()
    .WithUrl($"{Properties.Settings.Default.URL}/cucinahub")
    .Build();

// 注册客户端接收方法,Core版无需CreateHubProxy
_signalRConnection.On("GetValvole", async () => await GetValvole());

try
{
    // Core版用StartAsync而非Start
    await _signalRConnection.StartAsync();
}
catch (Exception ex)
{
    Log.Error(ex.ToString());
}

3. 验证服务器端中间件顺序

确保服务器端Startup.cs中的中间件顺序正确,UseEndpoints必须在UseRouting之后:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        endpoints.MapHub<CucinaHub>("/cucinahub");
    });
}

为什么这样修复?

  • ASP.NET Core SignalR与旧版SignalR协议不互通,必须使用对应版本的客户端库。
  • Core SignalR直接通过Hub路径进行协商和连接,不需要旧版的/signalr前缀和HubProxy代理层。

内容的提问来源于stack exchange,提问作者andreat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:05:20