ASP.NET Core Blazor部署VPS后SignalR C#调用报无效协商响应错误
解决方案
问题根源
错误信息里的<字符说明SignalR的协商请求返回了HTML内容(大概率是登录页面的重定向响应),而非预期的JSON格式协商数据。JS调用正常是因为浏览器会自动携带当前会话的Cookie,而Blazor的C# HubConnection在VPS部署环境下未正确传递授权Cookie,导致请求被认证中间件拦截并重定向。
具体修复步骤
调整HubConnection的凭证配置
替换UseDefaultCredentials为Credentials = HttpClientCredentials.Include,确保请求携带Cookie凭证:hubConnection = new HubConnectionBuilder() .WithUrl(_navigationManager.ToAbsoluteUri("/chathub"), options => { options.Credentials = HttpClientCredentials.Include; }) .Build();注:
UseDefaultCredentials适用于Windows身份认证场景,Cookie认证下应使用上述配置。检查认证中间件与SignalR端点顺序
确保Program.cs中认证中间件在SignalR端点注册之前,保证请求先经过认证:app.UseAuthentication(); app.UseAuthorization(); // 必须在认证中间件之后注册Hub端点 app.MapHub<ChatHub>("/chathub");排查IIS部署配置(若使用IIS)
- 确认站点的「身份验证」模块中,Cookie认证已启用,避免不必要的匿名认证或Windows认证干扰;
- 检查URL重写规则,确保
/chathub/negotiate路径未被错误重定向; - 验证应用程序池身份权限,确保其能正常访问站点资源。
验证协商请求响应
用浏览器开发者工具或抓包工具查看/chathub/negotiate请求的响应内容,确认是否返回HTML登录页,以此确认问题是否由认证重定向导致。
内容的提问来源于stack exchange,提问作者Tester L.
相关产品推荐
相关产品推荐

