目录
介绍
问题陈述
解决方案
介绍在处理Web应用程序时,很自然,我们需要在产品生命周期的各个阶段在各种环境(即开发,测试,生产等)之间切换。换句话说,所有这些环境可能具有不同的主机地址。让我们来看看其中的一些。
在开发阶段,我们通常使用http://localhost:8080/features/ ... 运行我们的应用程序,其中我们的主机是localhost:8080。
在测试阶段,可以在http://www.consumerapps.com/features/ ... 上运行同一应用程序,而我们的主机是www.consumerapps.com。
问题陈述如果我们想在日志文件中获取主机名以进行审核该怎么办。我们无法在应用程序中对其进行硬编码,因为它可能会根据应用程序运行的环境而变化。如何做到这一点?
解决方案在ASP.NET Core 3.1中,可以使用HttpContext轻松实现。我们要做的第一个更改是注册IHttpContextAccessor为单例:
services.AddSingleton();
接下来,我们必须通过构造函数注入使其对控制器可用:
public class HomeController : Controller
{
private readonly ILogger _logger;
private readonly IHttpContextAccessor _httpContextAccessor;
public HomeController(ILogger logger,
IHttpContextAccessor httpContextAccessor)
{
_logger = logger;
_httpContextAccessor = httpContextAccessor;
}
}
完成上述设置后,即可使用以下代码行在任何操作中访问主机名:
string host = _httpContextAccessor.HttpContext.Request.Host.Value;
希望您喜欢这个技巧。