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 如何从ASP.NET Core中的IHostedService获取网站URL或访问HttpContext?_Asp.net Core_.net Core_Httpcontext_Base Url_Asp.net Core Hosted Services - Fatal编程技术网

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

Asp.net core 如何从ASP.NET Core中的IHostedService获取网站URL或访问HttpContext?,asp.net-core,.net-core,httpcontext,base-url,asp.net-core-hosted-services,Asp.net Core,.net Core,Httpcontext,Base Url,Asp.net Core Hosted Services,在我们的多租户ASP.NET Core 2.2应用程序中,我们根据URI确定租户 如何从IHostedService获取网站URL? HttpContext始终为空 IHttpContextAccessor.HttpContext始终为空 public MyHostedService(ILogger<TurnTimeTask> logger, IHttpContextAccessor httpContextAccessor) { _logger = logger;

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

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

IHttpContextAccessor.HttpContext始终为空

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

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

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

将IHostedService视为独立于任何http请求在后台运行的服务,它在完全不同的上下文中运行,而不是在访问控制器的请求中运行


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

是否通过addHttpContextAccessor()方法将IHttpContextAccessor添加到DI?@Benaminmakal是<代码>服务。AddHttpContextAccessor()也不起作用。您如何调用
ProcessInScope
?在调用
ProcessInScope
之前,您是否向服务器发送了任何请求<代码>\u httpContextAccessor?.HttpContext?.Request仅当客户端有任何请求时才具有值。与我们分享一个演示和详细的步骤来重现您的问题。那么您是说IHostedService对Web服务器的URL是盲目的?如果您在www.example.org上运行一个服务,我会将其添加到我的appsettings中并从那里读取,这对您有用吗?您不能为此使用HttpContext,因为它与请求(IHostedService中没有)相关联,而且信任HttpContext获取正确的URL也是非常危险的,因为它可能在代理/负载平衡器后面出错。谢谢。问题是,在多租户环境中,它太单调乏味了。我们必须重新考虑这一点。谢谢
public override Task ProcessInScope(IServiceProvider serviceProvider)
{
    var request = _httpContextAccessor?.HttpContext?.Request;
    //request is always null
}