【发布时间】:2020-01-05 21:51:37
【问题描述】:
我有一个 Blazor Server 应用程序,它在开发和生产中的行为不同。问题是,在生产中,HttpContext 在服务类中始终为空
所有服务类都派生自BaseService 类。在构造函数中注入了所有依赖项。还有IHttpContextAccessor。
BaseService.cs
//Condensed down...
public abstract class BaseService
{
private IHttpContextAccessor _httpContextAccessor;
protected HttpContext HttpContext { get { return _httpContextAccessor.HttpContext; } }
protected BaseService(IConfiguration configuration,
UserManager<MyProjectIdentityUser> userManager,
IHttpContextAccessor httpContextAccessor,
Repositories.MyDbContext dbContext,
ILogger<object> logger)
{
//...
_httpContextAccessor = httpContextAccessor;
//...
}
public async Task<MyProjectIdentityUser> GetUserAsync()
{
//Here is the HttpContext always null...
var user = await UserManager.FindByIdAsync(HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);
return user;
}
}
每当我需要某个服务类中的当前用户时,我都会调用var user = GetUserAsync(); 并获取它。
当我在 Visual Studio 中调试应用程序时,此实现完美运行,但在生产中,我无法访问 HttpContext。
生产环境是 Ubuntu 18、Apache2 和 Cloudflare 的组合。
目前,我不知道从哪里开始寻找。 生产中的其他一切也都有效。只要我不尝试访问 HttpContext。
【问题讨论】:
-
您如何使用服务?
-
我将它们注入到剃须刀页面/组件中。
标签: .net-core apache2 cloudflare blazor-server-side asp.net-core-3.1