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

调用$.connection.hub.stop()时出现MIME类型错误的SignalR求助

解决SignalR调用$.connection.hub.stop()时的MIME类型错误

我之前也碰到过类似的棘手问题,结合你的配置和报错信息,给你几个针对性的排查和解决方向:

  • 关闭不必要的JSONP配置
    你的Startup里开启了EnableJSONP = true,但JSONP主要是为了兼容不支持CORS的旧浏览器跨域场景。如果你的客户端和服务器是同域,或者浏览器支持CORS(现在大部分现代浏览器都支持),建议关闭JSONP:

    var Configuration = new HubConfiguration {
        // EnableJSONP = true, 注释掉或者设为false
        EnableJavaScriptProxies = true,
        EnableDetailedErrors = true
    };
    

    JSONP的响应是脚本格式,如果服务器返回的内容MIME类型未正确设置,就会触发浏览器的严格MIME检查报错。

  • 检查请求的响应MIME类型
    打开浏览器开发者工具的Network标签,触发$.connection.hub.stop()操作,找到对应的SignalR请求,查看它的响应头和返回内容:

    • 如果返回内容为空,可能是服务器端处理stop请求时出现异常,结合EnableDetailedErrors = true,可以查看服务器日志或者直接在响应里找错误信息。
    • 如果响应的Content-Type头为空或者不是application/javascript/application/json,需要检查服务器宿主(比如IIS)的MIME类型配置,确保SignalR的请求能返回正确的MIME类型。
  • 确保客户端连接状态正确再调用stop
    在调用stop()之前,先判断连接是否处于connected状态,避免在未连接或正在断开时重复调用导致异常请求:

    if ($.connection.hub.state === $.signalR.connectionState.connected) {
        $.connection.hub.stop();
    }
    
  • 对齐客户端与服务器的SignalR版本
    你服务器端NuGet包已更新,但客户端用的是2.2.3版本,可能存在版本不兼容的情况。建议把客户端的jquery.signalR-2.2.3.min.js替换成和服务器端一致的版本(比如服务器如果是2.4.3,就用对应版本的客户端脚本),版本不一致容易引发各种奇怪的兼容性问题。

  • 验证CORS配置的完整性
    虽然你设置了map.UseCors(CorsOptions.AllowAll),但可以在Network响应头里确认是否存在Access-Control-Allow-Origin: *(或者你的具体域名)、Access-Control-Allow-Methods等头。如果这些头缺失,可能导致浏览器对跨域请求的处理异常,间接引发MIME类型相关的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:47:25