У меня есть приложение 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.