我想在用户打开网站时获得当前windows用户名。我的应用程序使用Blazor服务器端。为了获得当前用户名,我添加了:
- 在启动时。cs:
services.AddHttpContextAccessor();
(在ConfigureServices( - 在剃刀页面中:
@inject IHttpContextAccessor httpContextAccessor
- 在剃刀页面方法中:
string userName = httpContextAccessor.HttpContext.User.Identity.Name;
当我执行代码时,应用程序抛出一个异常:
"出现错误。此应用程序在重新加载之前可能不再响应">
只有在IIS上部署时才会出现此错误。在本地机器上运行良好。
我在尝试使用Blazor访问HttpContext以获取用户信息时遇到了类似的问题。我在这里找到了这个救命稻草。在IIS中运行web应用程序时,HttpContext为NULL为了解决这个问题,我所要做的就是在IIS中启用WebSockets。
以下是步骤:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/websockets?view=aspnetcore-3.1#iiiis express支持
如果要从更改该字符串
string userName = httpContextAccessor.HttpContext.User.Identity.Name
至
string userName = httpContextAccessor?.HttpContext?.User?.Identity?.Name??"Anonymous"
那么它可能会起作用。
这是因为您的IIS设置允许匿名访问,因此您的Identity对象为null。
您应该检查应用程序崩溃背后的内部异常,但这将是您的问题。您需要阻止IIS上的匿名访问才能通过Windows身份验证。
要管理IIS,请参阅此处https://stackoverflow.com/a/5458963/12285843