我构建了一个位于 WebAPI 服务中的简单 SignalR 中心,并在 WebAPI 和 SignalR 上包含了所有必需的 CORS 属性。我的 WebAPI 端点都按预期工作,但 SignalR 却没有。
我已经尝试了我能想到的所有方法以及我在网上可以找到的所有方法,但没有任何效果,我已经尝试过这个答案 https://stackoverflow.com/a/28666185/1422608, and 这个其他 https://stackoverflow.com/a/27084430/1422608至无解。
我的 SignalR 扩展方法如下所示
public static IAppBuilder UseSignalrNotificationService(this IAppBuilder app)
{
var config = new HubConfiguration();
config.Resolver = new HubDependencyResolver();
config.EnableDetailedErrors = true;
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR(config);
return app;
}
我什至尝试使用 Web.config 在所有请求上添加响应标头,但我总是遇到相同的错误:
XMLHttpRequest 无法加载&连接数据=。当凭据标志为 true 时,不能在“Access-Control-Allow-Origin”标头中使用通配符“*”。因此,不允许访问来源“MyOriginService”。 XMLHttpRequest 的凭据模式由 withCredentials 属性控制。
经过更多研究和摆弄问题的服务器端后,我遇到了这个答案 https://stackoverflow.com/a/31513360/1422608并发现错误出在请求的客户端。根据这个 GitHub 问题 https://github.com/SignalR/SignalR/commit/a5fb42a757f0767fc153cbc549ed87a14d68cc66,请求的“withCredentials”参数始终设置为“true”。解决方案是调用客户端的start方法,如下所示:
$.connection.hub.start({ withCredentials: false }).done(function () { //... }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)