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

SignalR报错:无法找到signalr/js脚本文件的解决求助

解决SignalR代理文件404错误及自动生成机制说明

我之前在使用SignalR 2.x版本时也碰到过一模一样的404问题,结合你的情况,我来一步步帮你排查:

关于signalr/hubs(教程里的signalr/js应该是笔误)自动生成的时机和原理

首先要明确:这个路径不是物理存在的文件夹或文件,它是SignalR在服务器运行时动态生成的代理脚本虚拟路径。当你的项目正确配置了SignalR路由,并且服务器启动后,访问这个路径时,SignalR中间件会自动生成包含Hub代理代码的JavaScript文件并返回给浏览器。

它的生成条件:

  • 项目中已安装正确版本的SignalR NuGet包
  • 服务器端已正确配置SignalR路由
  • 项目运行时,有客户端请求这个路径

具体解决步骤

1. 检查SignalR路由配置是否正确

这是最常见的问题根源,分两种项目类型:

  • ASP.NET MVC/Web Forms(使用OWIN Startup类):
    在Startup.cs的Configure方法中,确保添加了SignalR路由配置,并且放在其他路由配置之前:
    public void Configure(IApplicationBuilder app)
    {
        // 先配置SignalR路由
        app.MapSignalR();
    
        // 其他路由配置(比如MVC路由)
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
    
  • 传统ASP.NET Web Forms(无OWIN):
    在Global.asax的Application_Start方法中添加:
    protected void Application_Start(object sender, EventArgs e)
    {
        // 注册SignalR路由
        RouteTable.Routes.MapHubs();
        // 其他初始化代码
    }
    

2. 确认脚本引用顺序和版本匹配

SignalR对依赖的顺序和版本有严格要求,必须按以下顺序引用:

<!-- 先引用兼容版本的jQuery -->
<script src="~/Scripts/jquery-3.3.1.min.js"></script>
<!-- 再引用SignalR核心脚本,版本要和NuGet包一致 -->
<script src="~/Scripts/jquery.signalR-2.2.2.min.js"></script>
<!-- 最后引用SignalR代理 -->
<script src="~/signalr/hubs"></script>

注意:jQuery版本不能太新(比如jQuery 4.x可能和SignalR 2.2.2不兼容),推荐用1.6.4到3.x之间的版本。

3. 验证虚拟路径是否正确

如果你的项目在IIS中以虚拟目录运行,绝对路径/signalr/hubs会指向服务器根目录,而不是你的应用根目录。使用~/开头的相对路径可以自动解析到应用根目录,这是最稳妥的写法。

4. 检查NuGet包安装是否正确

打开NuGet包管理器,确认已安装Microsoft.AspNet.SignalR包,并且版本是2.2.2(和你引用的脚本版本完全一致)。如果版本不匹配,卸载后重新安装对应版本。

5. 手动生成代理文件(备选方案)

如果动态生成始终有问题,可以手动生成代理文件:

  1. 在Package Manager Console中安装SignalR工具包:
    Install-Package Microsoft.AspNet.SignalR.Utils
    
  2. 运行命令生成代理文件(替换成你的项目路径):
    signalr gh /path:"C:\YourProjectPath" /o:"~/Scripts"
    
  3. 生成后,直接引用这个物理文件:
    <script src="~/Scripts/signalr-hubs.js"></script>
    

最后排查小技巧

  • 直接在浏览器地址栏输入http://localhost:21167/signalr/hubs,如果返回JavaScript代码,说明路由配置正确;如果还是404,说明服务器端路由配置有问题,回到步骤1检查。
  • 确保Edge浏览器没有缓存旧的错误响应,可以按Ctrl+Shift+R强制刷新页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:39:29