Lees de huidige url uit in ASP.Net Core

Hoe kan ik in ASP.NET Core de huidige url uitlezen in code?

Voeg onderstaande code toe in de Startup klasse:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRouting(options => options.LowercaseUrls = true);
    services.AddRazorPages().AddRazorRuntimeCompilation();
    services.AddHttpContextAccessor(); // Add this one

    ...
}

Injecteer de IHttpContextAccessor in de constructor van je klasse waarin je de huidige URL wenst uit te lezen:

public class BlogService : IBlogService
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public BlogService(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }
}

Daarna lees je de Scheme en Host.Value properties uit:

private string GenerateUrl(string slug)
{
    return $"{_httpContextAccessor.HttpContext.Request.Scheme}://{_httpContextAccessor.HttpContext.Request.Host.Value}/blog/{slug}";
}

In het geval van de link naar dit blogbericht zou volgende string gegenereerd worden in de GenerateUrl methode: https://localhost:5001/blog/urls-in-asp-net-core-met-kleine-letters-in-plaats-van-hoofdletters

_httpContextAccessor.HttpContext.Request.Scheme leest het schema uit, wat meestal https zal zijn.

_httpContextAccessor.HttpContext.Request.Host.Value leest het adres (inclusief poortnummer) uit, wat tijdens de developing meestal localhost:5001 zal zijn. Maar dit kan even goed www.eenofanderesite.be zijn als waarde.