从ASP.NET Core 3.1中的当前URL获取主机信息

  • Post author:
  • Post category:其他



目录


介绍


问题陈述


解决方案



介绍


在处理


Web


应用程序时,很自然,我们需要在产品生命周期的各个阶段在各种环境(即开发,测试,生产等)之间切换。换句话说,所有这些环境可能具有不同的主机地址。让我们来看看其中的一些。


在开发阶段,我们通常使用



http://localhost:8080/features/






运行我们的应用程序,其中我们的主机是


localhost:8080




在测试阶段,可以在



http://www.consumerapps.com/features/






上运行同一应用程序,而我们的主机是


www.consumerapps.com




问题陈述


如果我们想在日志文件中获取主机名以进行审核该怎么办。我们无法在应用程序中对其进行硬编码,因为它可能会根据应用程序运行的环境而变化。如何做到这一点?


解决方案





ASP.NET Core 3.1


中,可以使用


HttpContext


轻松实现。我们要做的第一个更改是注册


IHttpContextAccessor


为单例:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();


接下来,我们必须通过构造函数注入使其对控制器可用:

public class HomeController : Controller
{
		private readonly ILogger<homecontroller> _logger;
		private readonly IHttpContextAccessor _httpContextAccessor;

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


完成上述设置后,即可使用以下代码行在任何操作中访问主机名:

string host = _httpContextAccessor.HttpContext.Request.Host.Value;


希望您喜欢这个技巧。