我只是想让SignalR在IIS上与ASP.NET Core一起工作。它在本地工作得很好(当然),但当部署时,我得到:
HttpRequestException:响应状态代码未指示成功:401(未授权)。
这是发生在
await hub.StartAsync();
字符串
在我的IIS中,我有:
的数据
这是一个内部网站,这是必需的。
I am currently initializing the Hubs like this:Hub = new HubConnectionBuilder()
.WithUrl(navMan.ToAbsoluteUri(hubPath), options =>
{
options.Transports = Microsoft.AspNetCore.Http.Connections.HttpTransportType.WebSockets;
options.UseDefaultCredentials = true;
})
.WithAutomaticReconnect()
.Build();
型
在这一点上,我已经改变了周围的一切这么多,我不知道哪条路是向上的。我想我的问题是:我如何让这在ASP.NET核心环境中工作?它可以工作吗?你还需要我来解决什么问题?谢谢。
编辑:看起来是一个已知的问题:https://github.com/dotnet/aspnetcore/issues/25000
2条答案
按热度按时间1cosmwyk1#
在构建带有Windows身份验证的Blazor Server聊天应用程序时也遇到了这个异常。Google搜索了一下,在ASP.NET Core SignalR - Windows身份验证中找到了这个身份验证和授权。
我添加了NameUserIdProvider类,将其添加到Startup.cs,没有更多的问题。
bq3bfh9z2#
我使用的是.NET框架和一个自托管服务器,而不是ASP.NET核心。我不确定这是否对这类问题有影响。
我尝试将我的站点设置为受信任,尝试使用和不使用SSL证书,并尝试添加NameUserIdProvider。当连接到另一台机器时,这些都不起作用。在本地,我可以使用“localhost”或我的本地主机名进行连接,使用和不使用SSL证书。即使在本地,我尝试修改我的主机文件以将“localhost2”指向127.0.0.1,但失败了。就像在真正的Active Directory实际传递凭据之前,有某种针对真正Active Directory的特殊验证。
对我来说,我发现防止401的唯一方法是通过IP地址而不是主机名连接。我也使用.NET客户端,所以我能够使用下面的代码仍然引用主机名,但将其转换为IP地址。
字符串