Skip to content

Latest commit

 

History

History
72 lines (52 loc) · 1.95 KB

README.md

File metadata and controls

72 lines (52 loc) · 1.95 KB

license version

MinApiLib.Validation

This package contains extensions to use data annotations in your endpoints. It uses the MiniValidation library.

Installation

You can install this package using the NuGet package manager:

Install-Package MinApiLib.Validation

Or using the .NET CLI:

dotnet add package MinApiLib.Validation

Usage

To use the validation, you can use the WithValidation extension method:

global using MinApiLib.Validation;

Now configure the validation filter in your endpoint:

public record struct Request(
    [FromBody] RequestBody Body
);

public class RequestBody
{
    [Required, StringLength(150, MinimumLength = 3)]
    public string Name { get; set; }

    [Required]
    public string City { get; set; }

    [Required]
    public string Country { get; set; }
}

public record CreateThing() : PostEndpoint<Request>("things")
{
    protected override RouteHandlerBuilder Configure(RouteHandlerBuilder builder)
        => builder
                .Produces<Response>(StatusCodes.Status201Created)
                .WithName("CreateThings")
                .WithTags("things")
                .WithValidation(); // invokes .ProducesValidationError()

    protected override async Task<IResult> OnHandleAsync(Request request, CancellationToken cancellationToken)
    {
        // async stuff
        return Results.Created($"/things/{created.Id}", created);
    }
}

It will validate the request body and return a 400 status code response if the validation fails:

$ curl -X POST -H "Content-Type: application/json" -d '{"name":"John Doe"}' "http://localhost:5000/things"
{"City":["The City field is required."],"Country":["The Country field is required."]}%