在 IIS 中运行 Web 应用程序时,HttpContext 为 NULL

Posted

技术标签:

【中文标题】在 IIS 中运行 Web 应用程序时,HttpContext 为 NULL【英文标题】:HttpContext is NULL when running web app in IIS 【发布时间】:2019-12-30 23:59:28 【问题描述】:

我有两个应用程序,都在同一台 Windows 机器上运行。一个应用程序是 IdentityServer4,另一个是我自己的 Web 应用程序(服务器端 Blazor 应用程序)。

这两个 Web 应用都是使用 .NET Core 3.1 构建的。

当我导航到我的网络应用程序时,我首先会被重定向到我的 IdentityServer4 应用程序。我登录,然后我被重定向回我的网络应用程序。

登录成功,因为IdentitServer的日志中没有错误。另外,我在 Blazor 网页上看到了某个 claim 值。我在我的 Blazor 页面中显示此 claimCascadingAuthenticationState。通过那条路径一切正常。

但是,每当我尝试通过“代码隐藏”文件中的HttpContext 获取登录用户时,我都会返回一个 Null 引用。例如:

public UserService(IHttpContextAccessor httpContextAccessor)

    // HttpClient is NULL...
    var httpCtx = _httpContextAccessor.HttpClient;  

奇怪的是,当我在 Visual Studio 中本地运行我的应用程序时,一切正常。当我在 Visual Studio 中调试时,我看到 HttpContext 设置了我的所有用户数据。

但是,由于某种原因,当我从 IIS 运行应用程序时,HttpContextNULL

我该如何解决这个问题?

【问题讨论】:

我也遇到过两次这种情况。不确定它们是否适用于您,但也许它证明有帮助。首先,确保在 IIS 上打开 WebSockets。其次,如果您的应用程序使用 app.UseAuthentication(很可能是这样),请确保它的顺序正确,正如 Microsoft 所描述的那样 here。 @Dennis1679 我在 IIS 上启用了 WebSockets,这似乎成功了!非常感谢这个建议!能否请您将此作为答案,以便我接受? 【参考方案1】:

如果 HttpContext 空引用异常发生部署到 Azure 应用服务或 IIS,你可能忘记启用 WebSockets。

这是交易:

如果应用在带有 IIS 的 Windows 上运行:必须启用 WebSockets

请参阅IIS/IIS Express support 部分。

看来这是你必须关注的prerequisite。在处理了同样的问题并决定从 Visual Studio 中将我的应用程序发布到 Azure 之后,我最近才发现了这一点。在我这样做之后,Visual Studio 给了我一个很好的警告,告诉我在 Azure 应用服务上启用 WebSockets 协议。

【讨论】:

在撰写本文时,您需要的设置位于应用服务(而非计划)中:设置 > 配置 > 常规设置 > 平台设置 > Web 套接字。附言你救了我! 这是给我的,我永远也想不通。我只是说因为它是一个自定义的 IIS 框,所以我永远不会收到那个错误。 你拯救了我的一天,启用网络套接字后它就像魅力一样工作。谢谢。 谢谢,我一直在努力解决这个问题,直到找到这个!

以上是关于在 IIS 中运行 Web 应用程序时,HttpContext 为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

让 .NET 5 Web API 在 IIS 中一直运行

如何调用启用 SSL 的 Web Api?

使用 CORS 在 IIS 上运行的 Angular 2 和 .net 核心 Web 应用程序之间的 HTTP 415 OPTIONS 请求

Web App 在 Visual Studio 2010 上运行良好,但在 IIS 上不行?

Visual Studio 执行web程序时提示“无法启动IIS Express Web服务器“的解决方案

调试在 IIS 中运行的 ASP.NET Core 应用程序