Ⅱ. 手順
1. 必要なパッケージをインストールする
dotnet add package FluentValidation dotnet add package FluentValidation.DependencyInjectionExtensions # Minimal API dotnet add package SharpGrip.FluentValidation.AutoValidation.Endpoints # MVC # dotnet add package SharpGrip.FluentValidation.AutoValidation.Mvc
2. サンプルプログラムを書く
Program.cs
using FluentValidation; using SharpGrip.FluentValidation.AutoValidation.Endpoints.Extensions; var builder = WebApplication.CreateBuilder(args); builder.Services.AddFluentValidationAutoValidation(options => { // [FromForm] に対してもバリデーションする場合はtrueを指定する // options.EnableFormBindingSourceAutomaticValidation = true; }); builder.Services.AddValidatorsFromAssemblyContaining<HelloRequest>(ServiceLifetime.Singleton); var app = builder.Build(); var endpointGroup = app.MapGroup("").AddFluentValidationAutoValidation(); endpointGroup.MapPost("/test001", (HelloRequest request) => { return $"Hello {request.LastName} {request.FirstName}"; }); app.Run(); public class HelloRequest { public required string FirstName { get; set; } public required string LastName { get; set; } public class Validator : AbstractValidator<HelloRequest> { public Validator() { RuleFor(x => x.FirstName) .NotEmpty(); // .WithMessage("FirstNameは空に出来ません"); RuleFor(x => x.LastName) .NotEmpty(); // .WithMessage("LastNameは空に出来ません"); } } }
実行結果
成功例
POST http://localhost:5178/test001 HTTP/1.1 Host: localhost:5178 Content-Type: application/json { "firstName": "tarou", "lastName": "tanaka" } HTTP/1.1 200 OK Hello tanaka tarou
失敗例
POST http://localhost:5178/test001 HTTP/1.1 Host: localhost:5178 Content-Type: application/json { "firstName": "", "lastName": "tanaka" } HTTP/1.1 400 Bad Request Content-Type: application/problem+json { "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "One or more validation errors occurred.", "status": 400, "errors": { "FirstName": [ "'First Name' は空であってはなりません。" ] } }