asp.net-core - 如何从 ASP.NET Core 中的 IHostedService 获取网站 URL 或访问 HttpContext?
问题描述
在我们的 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?
解决方案
当http 请求到达您的站点时会填充 HttpContext (非常简单的解释)。
将 IHostedService 视为独立于任何 http 请求在后台运行的东西,它在完全不同的上下文中运行,而不是例如命中控制器的请求。
HttpContext 与 ASP.NET Core 紧密相关,而 IHostedService 不需要 ASP.NET Core 即可运行。
推荐阅读
- typeorm - TypeORM QueryBuilder 使用外键约束插入表
- javascript - 需要帮助调用 text_a(),它最初在 foo() 中声明,在被调用函数 foo() 内
- javascript - 处理依赖反应查询
- regex - Ruby gem or regex to extract IPs from 0-255?
- typescript - 带有“扩展”的 Typeguard 不会像预期的那样缩小类型
- python - 附加模糊匹配的熊猫数据框
- python - 以下 arg 解包的区别
- wordpress - Wordpress - 将提交按钮添加到管理工具
- javascript - 在 Javascript 中取名为 Array 的 2D 随机数组
- c - 是否有任何将 __STDC__ 和 __STDC_IEC_559__ 定义为 1 的 C 编译器?