我在控制台应用中托管了一个 SignalR(AspNet Core 5.0),使用 Kestrel 作为网络主机。
我想在 Hub 实现中访问任何请求的用户身份,当访问以下身份时,身份值为 NULL。
我查看了 MSDN 上的可用文档并进行了以下更改,但没有按预期填充 Identity,也没有在任何地方找到任何适用于 AspNet Core 5.0 的示例。
知道我做错了什么吗?
public class ExampleHub : Hub
{
public Task Foo()
{
*// why is name NULL?*
var name = Context.User.Identity.Name;
return Task.Completed;
}
}
我在将服务配置为 StartUp 时添加了以下行:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNeogtiate();
services.AddSignalR(options => options.EnableDetailedErrors = true);
...
}
public void Configure(IApplicationBuuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseAuthentication();
app.UseEndpoints(endpoints => endpoints.MapHub<ExampleHub>("/Example"); });
}
答案 0 :(得分:0)
通过更改为 HttpSys 而不是 Kestrel 作为主机,设法使其正常工作。 Context.User.Identity
现在填充为 WindowsIdentity
。
在这种情况下,首选使用 HttpSys - 托管在 Windows 服务中的内部(公司)网络,而不是 Web 服务器 (IIS)。注意 IIS 也在内部使用 HttpSys。