Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Getting Host Information from the Current URL in ASP.NET Core 3.1

0.00/5 (No votes)
1 Feb 2020 1  
How to get the host information of web app having situational based URLs without hardcoding it.

Introduction

While working on web applications, 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 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.

Problem Statement

What if we want to get the host name in log file for an audit purpose. We cannot go and hardcode it in the application, as it may change based on the environment on which the application is running. How can this be achieved?

Solution

In ASP.NET Core 3.1, it can be easily achieved using HttpContext. First change we have to make 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<homecontroller> _logger;
		private readonly IHttpContextAccessor _httpContextAccessor;

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

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

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

Hope you enjoyed this tip.

History

  • 1st February, 2020: Initial version

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here