.NET Core 3+ and .NET 5 Update (2020 and later)
Use LinkGenerator
as detailed in @Dmitry Pavlov's answer on this thread. It's injectable as part of the web framework, and works with the HttpContext
already available in controllers, or accessible in other services by injecting the IHttpContextAccessor
.
For ASP.NET Core RC2 there is an issue for this on the github repo. Instead of injecting the IUrlHelper
, take an IUrlHelperFactory
. It also sounds like you'd need the IActionContextAccessor
injected as a Controller
no longer has a public property ActionContext
.
Register the dependency:
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
Then depend on it:
public SomeService(IUrlHelperFactory urlHelperFactory,
IActionContextAccessor actionContextAccessor)
{
var urlHelper =
urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext);
}
Then use it as you see fit.