Immediate.Apis is a source generator for minimal APIs, for
Immediate.Handlers
handlers. Simply add a [MapGet]
to the
[Handler]
class and an endpoint will automatically be added.
You can install Immediate.Apis with NuGet:
Install-Package Immediate.Apis
Or via the .NET Core command line interface:
dotnet add package Immediate.Apis
Either commands, from Package Manager Console or .NET Core CLI, will download and install Immediate.Handlers.
Create a Handler and an endpoint by adding the following code:
[Handler]
[MapGet("/users")]
public static partial class GetUsersQuery
{
public record Query;
private static ValueTask<IEnumerable<User>> HandleAsync(
Query _,
UsersService usersService,
CancellationToken token)
{
return usersService.GetUsers();
}
}
In your Program.cs
, add a call to app.MapXxxEndpoints()
, where Xxx
is the shortened form of the project name.
- For a project named
Web
, it will beapp.MapWebEndpoints()
- For a project named
Application.Web
, it will beapp.MapApplicationWebEndpoints()
The [AllowAnonymous]
and [Authorized("Policy")]
attributes are supported and will be applied to the endpoint.
[Handler]
[MapGet("/users")]
[AllowAnonymous]
public static partial class GetUsersQuery
{
public record Query;
private static ValueTask<IEnumerable<User>> HandleAsync(
Query _,
UsersService usersService,
CancellationToken token)
{
return usersService.GetUsers();
}
}
Additional customization of the endpoint registration can be done by adding a CustomizeEndpoint
method.
[Handler]
[MapGet("/users")]
[Authorize(Policies.UserManagement)]
public static partial class GetUsersQuery
{
internal static void CustomizeGetFeaturesEndpoint(IEndpointConventionBuilder endpoint)
=> endpoint
.Produces<IEnumerable<User>>(StatusCodes.Status200OK)
.ProducesValidationProblem()
.ProducesProblem(StatusCodes.Status500InternalServerError)
.WithTags(nameof(User));
public record Query;
private static ValueTask<IEnumerable<User>> HandleAsync(
Query _,
UsersService usersService,
CancellationToken token)
{
return usersService.GetUsers();
}
}