API 向 WASM 应用程序提供数据,一切按预期运行。但我尝试设置的从 WASM 到 API 的 SignalR 连接不起作用。 401 未经授权。
从 IIS 日志中,我可以得出结论,建立连接的协商 POST 请求不会发送用户凭据(精确的日志错误是 401 2 5)。但是在连接生成器中设置“UseDefaultCredentials = true”会引发“平台不受支持”异常。
连接设置代码:
connection = new HubConnectionBuilder()
.WithUrl($"{Program.AppConfig["http:baseAddress"]}someURL", options =>
{
//options.UseDefaultCredentials = true; <- throws
})
.AddJsonProtocol(options =>
{
options.PayloadSerializerOptions.PropertyNamingPolicy = null;
options.PayloadSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
options.PayloadSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
})
.ConfigureLogging(x => x.SetMinimumLevel(LogLevel.Trace))
.Build();
设置或删除集线器 API 代码上的 [Authorize] 属性不会执行任何操作,因为 IIS 已经拒绝连接,而不是 API。
是否有任何方法可以发送凭据,或者 SignalR 是否打算不适用于 Blazor WASM 应用程序?如果是这样,还有其他选择吗?不记名令牌身份验证?它适用于 API 和应用程序在同一台机器上运行的开发环境。
我尝试设置不同的身份验证值,例如允许匿名。修改了 SignalR 连接的选项。
Google 无法提供有关该问题的简明结果。
如果有人发现这个并有同样的问题,我无法正确修复它。相反,我使用 JavaScript-SignalR 建立连接,并使用 JSInterop 向 Blazor 应用程序提供数据。
我不确定这是否正确,但我读到 Blazor WASM 根本无法向 SignalR 提供用户凭据。这很奇怪,但符合我得到的 PlatformNotSupported 异常。