0

在我们的 MultiTenant ASP.NET Core 2.2 应用程序中,我们根据 URI 确定租户。

如何从 IHostedService 获取网站 URL?HttpContext 始终为空。

IHttpContextAccessor.HttpContext 始终为 NULL

public MyHostedService(ILogger<TurnTimeTask> logger, 
    IHttpContextAccessor httpContextAccessor)
{
    _logger = logger;
    _httpContextAccessor = httpContextAccessor;
}

即使在 Scope 中运行 IHostedService 也会为 httpContextAccessor.HttpContext 返回 NULL,即通过 Scoped Service 注入它也不起作用。

public override Task ProcessInScope(IServiceProvider serviceProvider)
{
    var request = _httpContextAccessor?.HttpContext?.Request;
    //request is always null
}

有没有其他方法可以从 IHostedService 获取网站的 URL?

4

1 回答 1

1

当http 请求到达您的站点时会填充 HttpContext (非常简单的解释)。

将 IHostedService 视为独立于任何 http 请求在后台运行的东西,它在完全不同的上下文中运行,而不是例如命中控制器的请求。

HttpContext 与 ASP.NET Core 紧密相关,而 IHostedService 不需要 ASP.NET Core 即可运行。

于 2019-07-12T15:37:00.313 回答