In order to get the base URL in controller scope, you simply get via Request:
public class HomeController : ControllerBase { public IActionResult About() { var url =$"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}"; return Ok(); } }
But for using it everywhere, you need to create an extension for httpContext:
public class HttpContextExtension { private static IHttpContextAccessor httpContextAccessor; public static HttpContext Current => httpContextAccessor.HttpContext; public static string AppBaseUrl => $"{Current.Request.Scheme}://{Current.Request.Host}{Current.Request.PathBase}"; internal static void Configure(IHttpContextAccessor contextAccessor) { httpContextAccessor = contextAccessor; } } public static class HttpContextExtensions { public static void AddHttpContextAccessor(this IServiceCollection services) { services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); } public static IApplicationBuilder UseHttpContext(this IApplicationBuilder app) { HttpContextExtension.Configure(app.ApplicationServices.GetRequiredService<IHttpContextAccessor>()); return app; } }
And don’t forget to add the UseHttpContext() in the startup class:
app.UseHttpContext()
Now you can use it everywhere:
var appBaseUrl = HttpContextExtension.AppBaseUrl;