如何从ASP.NET Core中的IHostedService获取网站URL或访问HttpContext?

时间:2019-07-12 09:49:20

标签: asp.net-core .net-core httpcontext base-url asp.net-core-hosted-services

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

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

IHttpContextAccessor.HttpContext始终为空

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

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

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

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

1 个答案:

答案 0 :(得分:0)

http请求点击您的网站时,就会填充

HttpContext(非常简单的解释)。

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

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