MinimalApis.Extensions
A set of extensions and helpers that extend the functionality of ASP.NET Core Minimal APIs.
Installation
NuGet Releases
This package is currently available from nuget.org:
> dotnet add package MinimalApis.Extensions
CI Builds
If you wish to use builds from this repo's main
branch you can install them from this repo's package feed.
-
Create a personal access token for your GitHub account with the
read:packages
scope with your desired expiration length: -
At the command line, navigate to your user profile directory and run the following command to add the package feed to your NuGet configuration, replacing the
<GITHUB_USER_NAME>
and<PERSONAL_ACCESS_TOKEN>
placeholders with the relevant values:~> dotnet nuget add source -n GitHub -u <GITHUB_USER_NAME> -p <PERSONAL_ACCESS_TOKEN> https://nuget.pkg.github.com/DamianEdwards/index.json
-
You should now be able to add a reference to the package specifying a version from the repository packages feed
-
See these instructions for further details about working with GitHub package feeds
Getting Started
- Install the NuGet package into your ASP.NET Core project:
> dotnet add package MinimalApis.Extensions
- .NET 6.0 projects only In your project's
Program.cs
, call theAddEndpointsMetadataProviderApiExplorer()
method onbuilder.Services
to enable enhanced endpoint metadata inApiExplorer
:var builder = WebApplication.CreateBuilder(args); builder.Services.AddEndpointsMetadataProviderApiExplorer(); // <-- Add this line in .NET 6.0 projects builder.Services.AddSwaggerGen(); ...
- Update your Minimal APIs to use the filters, binding, and result types from this library, e.g.:
app.MapPut("/todos/{id}", async Task<Results<NotFound, NoContent>> (int id, Todo todo, TodoDb db) => { var existingTodo = await db.Todos.FindAsync(id); if (existingTodo is null) return TypedResults.NotFound(); existingTodo.Title = todo.Title; existingTodo.IsCompleted = todo.IsCompleted; await db.SaveChangesAsync(); return TypedResults.NoContent(); }) .WithParameterValidation();
What's Included?
This library provides types that help extend the core functionality of ASP.NET Core Minimal APIs in the following ways:
- Enhanced parameter binding via
IParameterBinder
andBind<TValue>
,Body<TValue>
,JsonFormFile
, and others - Extra result types available via
Results.Extensions
includingPlainText
,Html
, andUnsupportedMediaType
- For .NET 7.0 apps, an endpoint filter that validates route handler parameters and auto-responds with validation problem if validation fails
- Poly-filling of .NET 7.0 features for use in .NET 6.0 projects including:
- Typed
IResult
objects for easier unit testing (available viaTypedResults
) including theIStatusCodeHttpResult
,IContentTypeHttpResult
, andIValueHttpResult
interfaces - Automatic population of detailed endpoint descriptions in Swagger/OpenAPI via the ability for input and result types to populate endpoint metadata via
IEndpointParameterMetadataProvider
andIEndpointMetadataProvider
- Union
IResult
return types viaResults<TResult1, TResultN>
that enable route handler delegates to declare all the possibleIResult
types they can return, enabling compile-time type checking and automatic population of all possible responses in Swagger/OpenAPI from type information
- Typed
Sample Projects
TodoApis.Dapper
An example Todos application using ASP.NET Core Minimal APIs and the Dapper library for data storage in SQLite.
MinimalApis.Examples
Contains small examples for other types in this library.
MinimalApiPlayground
Shows many examples of using the types in this library along with other things related to ASP.NET Core Minimal APIs.