I am trying to figure out how to access the current absolute Uri -- i.e. the absolute url of the view that is currently being rendered -- from a user class in .
You may use the GetDisplayUrl
extension method.
var url = httpContextAccessor.HttpContext?.Request?.GetDisplayUrl();
Assuming httpContextAccessor
is an object of IHttpContextAccessor
which was injected via DI.
This extension method is defined in Microsoft.AspNetCore.Http.Extensions
namespace. So you need to have a using statement to include it in your file.
using Microsoft.AspNetCore.Http.Extensions;
You want the IHttpContextAccessor
"configured or injected" in your Startup
so later on when you use the helper during the context of a request you can use it to access the current HttpContext
object.
You cannot store the context on a static field as that context only makes sense while serving a specific request. Typically you will leave the accessor in a static field and use it every time your helper is called.
IHttpContextAccessor
yet configured and you will get those null references.This would be a simple thing of writing what you want:
public static class Context
{
private static IHttpContextAccessor HttpContextAccessor;
public static void Configure(IHttpContextAccessor httpContextAccessor)
{
HttpContextAccessor = httpContextAccessor;
}
private static Uri GetAbsoluteUri()
{
var request = HttpContextAccessor.HttpContext.Request;
UriBuilder uriBuilder = new UriBuilder();
uriBuilder.Scheme = request.Scheme;
uriBuilder.Host = request.Host.Host;
uriBuilder.Path = request.Path.ToString();
uriBuilder.Query = request.QueryString.ToString();
return uriBuilder.Uri;
}
// Similar methods for Url/AbsolutePath which internally call GetAbsoluteUri
public static string GetAbsoluteUrl() { }
public static string GetAbsolutePath() { }
}
One more thing to bear in mind: