Asp.net core 在IIS中运行web应用时,HttpContext为空
我有两个应用程序,都运行在同一台Windows计算机上。一个应用程序是IdentityServer4,另一个是我自己的web应用程序(服务器端Blazor应用程序) 这两个web应用都是使用.NET Core 3.1构建的 当我导航到我的web应用程序时,我首先被重定向到我的IdentityServer4应用程序。我登录,然后我被重定向回我的web应用程序 登录成功,因为IdentitServer的日志中没有错误。另外,我在Blazor网页上看到了一个特定的Asp.net core 在IIS中运行web应用时,HttpContext为空,asp.net-core,iis,identityserver4,blazor-server-side,.net-core-3.1,Asp.net Core,Iis,Identityserver4,Blazor Server Side,.net Core 3.1,我有两个应用程序,都运行在同一台Windows计算机上。一个应用程序是IdentityServer4,另一个是我自己的web应用程序(服务器端Blazor应用程序) 这两个web应用都是使用.NET Core 3.1构建的 当我导航到我的web应用程序时,我首先被重定向到我的IdentityServer4应用程序。我登录,然后我被重定向回我的web应用程序 登录成功,因为IdentitServer的日志中没有错误。另外,我在Blazor网页上看到了一个特定的声明值。我在Blazor页面中通过Ca
声明
值。我在Blazor页面中通过CascadingAuthenticationState
显示此claim
。通过这条路,一切都很顺利
但是,每当我试图通过我的“代码隐藏”文件中的HttpContext
获取登录用户时,我都会得到一个空引用。例如:
public UserService(IHttpContextAccessor httpContextAccessor)
{
// HttpClient is NULL...
var httpCtx = _httpContextAccessor.HttpClient;
}
奇怪的是,当我在VisualStudio中本地运行我的应用程序时,一切都很好。当我在VisualStudio中调试时,我看到HttpContext
是用我的所有用户数据设置的
但是,由于某种原因,当我从IIS运行应用程序时,HttpContext
为NULL
如何解决此问题?如果部署到Azure App Services或IIS后发生HttpContext空引用异常,您可能忘记启用WebSocket 交易如下: 如果应用程序在带有IIS的Windows上运行:必须启用WebSockets 见本节
看来这是一个你必须遵循的原则。在处理了同样的问题并决定将我的应用程序从VisualStudio发布到Azure之后,我最近才发现这一点。在我这么做之后,Visual Studio给了我一个很好的警告,告诉我在Azure应用程序服务上启用WebSockets协议。我也曾两次遇到过这种情况。不确定它们是否适用于你,但可能会有帮助。首先,确保在IIS上打开WebSocket。其次,如果你的应用程序使用app.UseAuthentication(很可能是这样),那么请确保它的顺序与Microsoft描述的一样正确。@Dennis1679我在IIS上启用了WebSocket,这似乎就成功了!非常感谢你的建议!你能不能提供这个答案,这样我就可以接受了?