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

Viv*_*ndi 11 iis asp.net-core identityserver4 blazor-server-side .net-core-3.1

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

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

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

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

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

public UserService(IHttpContextAccessor httpContextAccessor)
{
    // HttpClient is NULL...
    var httpCtx = _httpContextAccessor.HttpClient;  
}
Run Code Online (Sandbox Code Playgroud)

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

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

我该如何解决这个问题?

Den*_* W. 20

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

这是交易:

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

请参阅IIS/IIS Express 支持部分。

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