FluentValidation In Minimal APIs In ASP.NET Core 7.0

In this article, we will learn how to implement FluentValidation to our model classes in ASP.NET core 7 with minimal APIs.

We have already discussed what is minimal API in .Net Core. While working with an application, validation plays an important role. It helps us validate our data and ensure we insert the correct data into the database.

There is no in-built support to validate the model in the minimal APIs (unlike what we used to have in ASP.NET Core MVC and Razor Pages). Hence, we need to write custom code to validate the models in our minimal API applications.

FluentValidation validation helps us validate our model when working with DotNet Core 7.0 application.

To utilize the functionality of FluentValidation, we need to install the FluentValidation library from the NuGet package manager. FluentValidation uses the fluent API and the lambda expression to create the data validation rules for a model. Below is the command to install the FluentValidation package

PM> Install-Package FluentValidation.AspNetCore

Let's understand fluentValidation practically

First, let's create an ASP.NET core application. So to create it, open VS 2022, select the ASP.NET Core Web API template and click Next.

FluentValidation in minimal APIs in ASP.NET Core 7.0

Now give the project name 'FluentValidationInAspCore' and click Next.

FluentValidation in minimal APIs in ASP.NET Core 7.0

Now select the Framework as .NET 7.0 and click Next.

Once you click Next, it will create an ASP.NET core application. Now go to Nuget Package Manager by right click on the project solution.

FluentValidation in minimal APIs in ASP.NET Core 7.0

Once you click on Manage Nuget packages, a new window will appear. Search for "FluentValidation.AspNetCore" and install it.

FluentValidation in minimal APIs in ASP.NET Core 7.0

Now right-click on the project and create a Student Model class like below

namespace FluentValidationInAspCore {
    public class Student {
        public int Id {
            get;
            set;
        }
        public string ? Name {
            get;
            set;
        }
        public int Age {
            get;
            set;
        }
        public double Address {
            get;
            set;
        }
    }
}

FluentValidation in minimal APIs in ASP.NET Core 7.0

Create the StudentValidator class

To implement the required field or other validation to the student Model class, we need to create a StudentValidation class. Here we can create our custom validation by inheriting StudentValidation class from AbstractValidator, like below.

public class StudentValidator: AbstractValidator < Student > {
    public StudentValidator() {
        RuleFor(x => x.Id).NotNull();
        RuleFor(x => x.Name).Length(15);
        RuleFor(x => x.Age).NotNull().InclusiveBetween(5, 20);
        RuleFor(x => x.Address).NotNull().LessThanOrEqualTo(200);
    }
}

FluentValidation in minimal APIs in ASP.NET Core 7.0

Now create an interface IstudentBuilder class and write the below code to add the student information.

public interface IstudentBuilder {
    public void AddStudent(Student student);
}

FluentValidation in minimal APIs in ASP.NET Core 7.0

Now create a studentBuilder class and inherit it from the Istudentbuilder interface and implement the method.

public class StudentBuilder: IstudentBuilder {
    public void AddStudent(Student student) {
        // Write your logic to add data into the database
    }
}

FluentValidation in minimal APIs in ASP.NET Core 7.0

Now we need to register our validator class and builder classes to Program.cs like below

using FluentValidation;
using FluentValidationInAspCore;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container. 
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddScoped < IValidator < Student > , StudentValidator > ();
builder.Services.AddScoped < IstudentBuilder, StudentBuilder > ();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment()) {
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

FluentValidation in minimal APIs in ASP.NET Core 7.0

Create the HttpPost endpoint in the Program.cs

Write the below code to create the HTTP POST endpoint in minimal API.

app.MapPost("/student", async (IValidator < Student > validator, IstudentBuilder builder, Student student) => {
    var validationResult = await validator.ValidateAsync(student);
    if (!validationResult.IsValid) {
        return Results.ValidationProblem(validationResult.ToDictionary());
    }
    builder.AddStudent(student);
    return Results.Created($ "/{student.Id}", student);
});

FluentValidation in minimal APIs in ASP.NET Core 7.0

Now run your application on swagger. Click on the Try it out button.

FluentValidation in minimal APIs in ASP.NET Core 7.0

Without giving any value, if you run it, you will see a validation error like below.

FluentValidation in minimal APIs in ASP.NET Core 7.0

So, these are the step to implement model validation to Minimal API in asp.net core 7.0.