Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 在IIS中运行web应用时,HttpContext为空_Asp.net Core_Iis_Identityserver4_Blazor Server Side_.net Core 3.1 - Fatal编程技术网

Asp.net core 在IIS中运行web应用时,HttpContext为空

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

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

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

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

登录成功,因为IdentitServer的日志中没有错误。另外,我在Blazor网页上看到了一个特定的
声明
值。我在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,这似乎就成功了!非常感谢你的建议!你能不能提供这个答案,这样我就可以接受了?