EndpointHelpers 2.0.0
dotnet add package EndpointHelpers --version 2.0.0
NuGet\Install-Package EndpointHelpers -Version 2.0.0
<PackageReference Include="EndpointHelpers" Version="2.0.0" />
<PackageVersion Include="EndpointHelpers" Version="2.0.0" />
<PackageReference Include="EndpointHelpers" />
paket add EndpointHelpers --version 2.0.0
#r "nuget: EndpointHelpers, 2.0.0"
#:package EndpointHelpers@2.0.0
#addin nuget:?package=EndpointHelpers&version=2.0.0
#tool nuget:?package=EndpointHelpers&version=2.0.0
EndpointHelpers
EndpointHelpers is a Roslyn source generator that creates strongly-typed helpers for ASP.NET Core MVC controllers. It generates:
IUrlHelperhelpers with action methods per controller.LinkGeneratorhelpers withGet{Action}Pathmethods, includingHttpContextoverloads.- Redirect helpers for controller actions, so
RedirectToAction("Index")becomesRedirectToIndex(). - View helpers on controllers, so
return View("Index")becomesreturn IndexView(). - Extension properties on
IUrlHelperandLinkGeneratorto access the helpers. - Attribute types are used to control generation.
This package ships only a source generator and generated code. There is no runtime dependency.
Example
Without the generator
<a href='@Url.Action(action: "Details",controller: "Orders", values: new { orderId = 123, source = "dashboard" } )'>
View order
</a>
With the generator enabled
<a href='@Url.Orders.Details(123, "dashboard")'>
View order
</a>
Install
Add the NuGet package:
<ItemGroup>
<PackageReference Include="EndpointHelpers" Version="1.0.5"/>
</ItemGroup>
or
dotnet add package EndpointHelpers
Optional (for better IntelliSense in JetBrains IDEs):
<ItemGroup>
<PackageReference Include="JetBrains.Annotations" Version="2025.2.4" />
</ItemGroup>
When JetBrains.Annotations is installed, generated MVC helper methods include ASP MVC annotations, and IntelliSense/navigation for views and model parameters works correctly when using R# or Rider.
Quick Start
Enable generation at the assembly level:
using EndpointHelpers;
[assembly: GenerateUrlHelper]
[assembly: GenerateLinkGenerator]
Or apply to a specific controller:
using EndpointHelpers;
[GenerateUrlHelper]
[GenerateLinkGenerator]
[GenerateRedirectToAction]
[GenerateViewHelpers]
public partial class HomeController : Controller
{
public IActionResult Index() => View();
public IActionResult Privacy() => View();
}
Or only to a specific action:
using EndpointHelpers;
public partial class HomeController : Controller
{
[GenerateUrlHelper]
[GenerateRedirectToAction]
public IActionResult Index() => View();
public IActionResult Privacy() => View();
}
Redirect example:
public partial class OrdersController : Controller
{
public IActionResult Index() => View();
[GenerateRedirectToAction]
public IActionResult Details(int orderId, string? source) => View();
public IActionResult Save()
{
return RedirectToDetails(orderId: 123, source: "created");
}
}
Attributes and Scope
Generation can be enabled at different scopes:
- Assembly:
[assembly: GenerateUrlHelper],[assembly: GenerateLinkGenerator]. - Controller:
[GenerateUrlHelper],[GenerateLinkGenerator],[GenerateRedirectToAction]on the controller class. - Action:
[GenerateUrlHelper],[GenerateLinkGenerator],[GenerateRedirectToAction]on a specific action method. - View helpers:
[GenerateViewHelpers]on the controller class (controller-only, not per-action or assembly). GenerateRedirectToActiondoes not support assembly-level attributes and requires controllers declaredpartial.GenerateViewHelpersdoes not support assembly-level attributes and requires controllers declaredpartial.
You can exclude methods using:
[UrlHelperIgnore][LinkGeneratorIgnore][RedirectToActionIgnore][NonAction](standard ASP.NET Core MVC attribute)
Behavior
- Controllers are discovered by name: non-abstract classes ending with
Controller. - Only public, ordinary methods are included.
- UrlHelper and LinkGenerator helpers are placed in the
EndpointHelpersnamespace. - Redirect helpers are generated as
partialmembers in the controller namespace. - Extension properties use the controller name without the
Controllersuffix. - Controllers with
[Area("...")]are grouped by area, so generated access becomesUrl.<Area>.<Controller>andLinks.<Area>.<Controller>.
Controller and action discovery
[GenerateUrlHelper]
[GenerateLinkGenerator]
[GenerateRedirectToAction]
public partial class OrdersController : Controller
{
public IActionResult Index() => View();
public IActionResult Details(int orderId, string? source) => View();
}
Generated surface
// UrlHelperGenerator
Url.Orders.Index();
Url.Orders.Details(orderId: 123, source: "dashboard");
Url.Admin.Users.Index();
// LinkGeneratorGenerator
LinkGenerator.Orders.GetIndexPath();
LinkGenerator.Orders.GetDetailsPath(123, "dashboard");
LinkGenerator.Admin.Users.GetIndexPath();
// RedirectToActionGenerator
RedirectToIndex();
RedirectToDetails(orderId: 123, source: "dashboard");
RedirectToUsers();
Example Project
See example/EndpointHelpers.Sample for a minimal MVC app using all generators.
License
GNU General Public License
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.CSharp (>= 5.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.