使用 HttpContext 时 Blazor 抛出错误
Posted
技术标签:
【中文标题】使用 HttpContext 时 Blazor 抛出错误【英文标题】:Blazor throwing error when using HttpContext 【发布时间】:2021-11-10 12:37:11 【问题描述】:我想在用户打开网站时获取当前的 windows 用户名。我的应用程序使用 Blazor 服务器端。为了获取当前用户名,我添加了:
-
在startup.cs:
services.AddHttpContextAccessor();
(下
配置服务)
在剃须刀页面中:@inject IHttpContextAccessor httpContextAccessor
在剃须刀页面方法:string userName = httpContextAccessor.HttpContext.User.Identity.Name;
当我执行代码时,应用程序抛出异常:
“发生错误。此应用程序在重新加载之前可能不再响应。”
只有在 IIS 上部署时才会出现此错误。在本地机器上运行良好。
【问题讨论】:
【参考方案1】:如果你要改变那个字符串
string userName = httpContextAccessor.HttpContext.User.Identity.Name
到
string userName = httpContextAccessor?.HttpContext?.User?.Identity?.Name??"Anonymous"
那么它可能会起作用。
这是因为您的 IIS 设置允许匿名访问,因此您的 Identity 对象为空。
您应该检查应用程序崩溃背后的内部异常,但这将是您的问题。您需要阻止 IIS 上的匿名访问才能通过 Windows 身份验证。
要管理 IIS,请参阅此处https://***.com/a/5458963/12285843
【讨论】:
是的,你是对的。您建议的修改有效,但用户名返回“匿名”而不是登录的用户名。目前,在 IIS 中,我启用了“匿名”身份验证,并且禁用了“Windows”。请告知 IIS 需要哪些更改以及应用程序池的标识应该是什么? Stack Overflow 上已经回答了这个问题。在这里***.com/a/5458963/12285843 请接受我的回答。 另请注意,App Pool 身份与 Windows Auth 用户身份无关 我已经查看了那个帖子。在 Web.Config 中,由于我使用的是 ASP.NET Core,添加这些行会导致应用程序抛出错误【参考方案2】:我在尝试使用 Blazor 访问 HttpContext 以获取用户信息时遇到了类似的问题。我在这里找到了这个,这是一个救生员。 HttpContext is NULL when running web app in IIS 为了解决这个问题,我所要做的就是在 IIS 中启用 WebSockets。
步骤如下:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/websockets?view=aspnetcore-3.1#iisiis-express-support
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于使用 HttpContext 时 Blazor 抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在服务器端 Blazor 中访问 HttpContext?
如何使用 IIS 从 Blazor 服务器获取 WindowsIdentity.RunImpersonated(token, action) 的 HttpContext(或 AccessToken)
在 IIS 中运行 Web 应用程序时,HttpContext 为 NULL
Blazor SignInManager PasswordSignIn() 方法抛出 InvalidOperationException