Monday, February 3, 2020

Getting host information from current the URL in ASP.NET Core 3.1

While working on web application, it’s quite natural that we need to jump between various environments (i.e. Development, Testing, Production, etc.) during various phases of product life cycle. In other words, all these environments may have different-different host addresses. Let’s have a look at a few of those.

During the development phase, we usually run our application with http://localhost:8080/features/..., where our host is localhost:8080

During the testing phase, the same application can be run on http://www.consumerapps.com/features/..., where our host is www.consumerapps.com

Now, what if we want to get the host name in log file for an audit purpose. We cannot go and hard code it in the application, as it may change based on the environment on which application is running.

In ASP.NET Core 3.1, it can be easily achieved using HttpContext. First change we have to do is, to register IHttpContextAccessor as a singleton:

 services.AddSingleton<IHttpContextAccessor,HttpContextAccessor>(); 

Next, we have to make it available to the controller via constructor injection:

public class HomeController : Controller
{
        private readonly ILogger _logger;
        private readonly IHttpContextAccessor _httpContextAccessor;
 
        public HomeController(ILogger logger, IHttpContextAccessor httpContextAccessor)
        {
            _logger = logger;
            _httpContextAccessor = httpContextAccessor;
        }
}

Once above setup is done, host name can be accessed in any Action using below line of code:

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

Hope you enjoyed this tip.

No comments:

Post a Comment