当 运行 网络应用程序在 IIS 中时,HttpContext 为 NULL
HttpContext is NULL when running web app in IIS
我有两个应用程序,都运行在同一台Windows机器上。一个应用程序是 IdentityServer4,另一个是我自己的 Web 应用程序(服务器端 Blazor 应用程序)。
这两个网络应用都是使用 .NET Core 3.1 构建的。
当我导航到我的网络应用程序时,我首先被重定向到我的 IdentityServer4 应用程序。我登录,然后我被重定向回我的网络应用程序。
登录成功,因为IdentitServer的日志没有错误。此外,我在我的 Blazor 网页上看到了某个 claim
值。我在我的 Blazor 页面中显示 claim
到 CascadingAuthenticationState
。通过那条路一切正常。
但是,每当我尝试通过 "code behind" 文件中的 HttpContext
获取登录用户时,我都会得到一个 Null 引用。例如:
public UserService(IHttpContextAccessor httpContextAccessor)
{
// HttpClient is NULL...
var httpCtx = _httpContextAccessor.HttpClient;
}
奇怪的是,当我在 Visual Studio 本地 运行 我的应用程序时一切正常。当我在 Visual Studio 中调试时,我看到 HttpContext
设置了我所有的用户数据。
但是,由于某些原因,当我 运行 来自 IIS 的应用程序时 HttpContext
是 NULL
。
我该如何解决这个问题?
如果在部署到 Azure 应用服务或 IIS 后发生 HttpContext 空引用异常,您可能忘记启用 WebSockets。
这是交易:
If the app runs on Windows with IIS: WebSockets must be enabled.
See the IIS/IIS Express support section.
看来这是一个prerequisite必须遵守的。在处理相同的问题并决定将我的应用程序从 Visual Studio 中发布到 Azure 之后,我自己最近才发现这一点。在我这样做之后,Visual Studio 给了我一个很好的警告,告诉我在 Azure 应用服务上启用 WebSockets 协议。
我有两个应用程序,都运行在同一台Windows机器上。一个应用程序是 IdentityServer4,另一个是我自己的 Web 应用程序(服务器端 Blazor 应用程序)。
这两个网络应用都是使用 .NET Core 3.1 构建的。
当我导航到我的网络应用程序时,我首先被重定向到我的 IdentityServer4 应用程序。我登录,然后我被重定向回我的网络应用程序。
登录成功,因为IdentitServer的日志没有错误。此外,我在我的 Blazor 网页上看到了某个 claim
值。我在我的 Blazor 页面中显示 claim
到 CascadingAuthenticationState
。通过那条路一切正常。
但是,每当我尝试通过 "code behind" 文件中的 HttpContext
获取登录用户时,我都会得到一个 Null 引用。例如:
public UserService(IHttpContextAccessor httpContextAccessor)
{
// HttpClient is NULL...
var httpCtx = _httpContextAccessor.HttpClient;
}
奇怪的是,当我在 Visual Studio 本地 运行 我的应用程序时一切正常。当我在 Visual Studio 中调试时,我看到 HttpContext
设置了我所有的用户数据。
但是,由于某些原因,当我 运行 来自 IIS 的应用程序时 HttpContext
是 NULL
。
我该如何解决这个问题?
如果在部署到 Azure 应用服务或 IIS 后发生 HttpContext 空引用异常,您可能忘记启用 WebSockets。
这是交易:
If the app runs on Windows with IIS: WebSockets must be enabled.
See the IIS/IIS Express support section.
看来这是一个prerequisite必须遵守的。在处理相同的问题并决定将我的应用程序从 Visual Studio 中发布到 Azure 之后,我自己最近才发现这一点。在我这样做之后,Visual Studio 给了我一个很好的警告,告诉我在 Azure 应用服务上启用 WebSockets 协议。