Duyda.MiniMap
1.0.2
dotnet add package Duyda.MiniMap --version 1.0.2
NuGet\Install-Package Duyda.MiniMap -Version 1.0.2
<PackageReference Include="Duyda.MiniMap" Version="1.0.2" />
<PackageVersion Include="Duyda.MiniMap" Version="1.0.2" />
<PackageReference Include="Duyda.MiniMap" />
paket add Duyda.MiniMap --version 1.0.2
#r "nuget: Duyda.MiniMap, 1.0.2"
#:package Duyda.MiniMap@1.0.2
#addin nuget:?package=Duyda.MiniMap&version=1.0.2
#tool nuget:?package=Duyda.MiniMap&version=1.0.2
MiniMap
MiniMap is a handy Roslyn source generator that removes the boilerplate from ASP.NET Core Minimal API route registration.
Instead of manually writing app.MapGet("/path", handler) calls, just decorate your endpoint classes and let MiniMap handle the rest.
Install
dotnet add package Duyda.MiniMap
Quick start
using MiniMap;
namespace MyApi;
[MapGet("/api/users/{name}")]
[Authorize]
public static partial class GetUserEndpoint
{
public static string Handle(string name)
{
return $"User {name}";
}
}
And MiniMap generates a Map() method to register the route for you:
// <auto-generated />
/// <summary>
/// Auto-generated Map method to register endpoint route by MiniMap.
/// </summary>
using global::Microsoft.AspNetCore.Builder;
namespace MyApi;
public static partial class GetUser
{
public static void Map(global::Microsoft.AspNetCore.Routing.IEndpointRouteBuilder builder)
{
builder.MapGet("/api/users/{name}", global::MyApi.GetUser.Handle)
.RequireAuthorization();
}
}
Register it in Program.cs:
var app = WebApplication.CreateBuilder(args).Build();
GetUser.Map(app);
app.Run();
Features
| Attribute | Behaviour |
|---|---|
[MapGet], [MapPost], [MapPut], [MapDelete], [MapPatch] |
Map an HTTP method + route pattern to your handler |
[AllowAnonymous] |
Skip auth on the endpoint |
[Authorize] |
Require authorization |
[DisableAntiforgery] |
Disable antiforgery (useful for API-only endpoints) |
Multiple HTTP verbs on one endpoint? Just stack attributes:
[MapGet("/api/multiple-verbs"), MapPost, MapPut, MapDelete, MapPatch]
public static partial class MultipleVerbsEndpoint
{
public static void Handle() { }
}
Naming convention
MiniMap looks for a HandleAsync() or Handle() method in your class. HandleAsync() takes priority if both exist.
But you can just use interface!
You're right, it's a common pattern to do:
public interface IEndpoint
{
// expose stuffs here so you can write a general helper to register route on this interface
}
Then a helper scans for implementations, instantiates them, and calls Map() on each. It works, but it means reflection at startup (or you wire it yourself), and allocated instances you don't need.
I personally like to keep it static, no new, no constructor and no state because there's no reason to instantiate a class. Minimal API lets you do DI through the method itself. And you also get the benefit of organizing everything in one single place: the route attribute, the handler logic, the generated registration code, request/response DTOs, validator class, etc...
License
MIT — see LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.