Skip to main content

How To Use Fluent Validation In .NET Core.

Sometimes, there are many validation rules in our methods, such as the employee name cannot be null, the age must be greater than 18, etc., and as usual, we may write some code for defining these rules.
static void Main(string[] args)  
{  
    var addEmployee = new AddEmployee();  
    AddEmployee(addEmployee);  
    Console.ReadKey();  
}  
  
static void AddEmployee(AddEmployee addEmployee)  
{  
    if (string.IsNullOrWhiteSpace(addEmployee.EmployeeName))  
    {  
        Console.WriteLine($"employee name cannot be null");  
        return;  
    }  
  
    if (string.IsNullOrWhiteSpace(addEmployee.EmployeePhone))  
    {  
        Console.WriteLine($"employee phone cannot be null");  
        return;  
    }  
  
    if (addEmployee.EmployeeAge <= 0)  
    {  
        Console.WriteLine($"Employee must great than 0");  
        return;  
    }   
    //code for save values ...  
}  

However, this way seems not fluent. Here, I will introduce a small validation library named FluentValidation that uses a fluent interface and lambda expressions for building the validation rules. You can follow this link for more information.

https://fluentvalidation.net/

Step 1 : Creating the validator.

We need to create a class that inherits from AbstractValidator<T>, where T is the type of class that you wish to validate. For the background example, we can create the following validator.
public class AddEmployeeValidator : AbstractValidator<AddEmployee> 
{ 
    public AddEmployeeValidator() 
    { 
        RuleFor(x => x.EmployeeName).NotEmpty().WithMessage("employee name cannot be null"); 
        RuleFor(x => x.EmplyeePhone).NotEmpty(); 
        RuleFor(x => x.EmployeeAge).GreaterThan(0).WithMessage("age must be great than 0"); 
    } 
} 

What does this validator do?
The Employee Name property is not empty. If this property is empty, the error message will be "name cannot be null".

The Employee Phone property is not empty. If this property is empty, the error message will be the default value.

The Employee Age property must be greater than 0. If this property is not greater than 0, the error message will be the default value.

Step 2 : Using the validator.
static void AddEmployeeWithFluentValidation(AddEmployee addEmployee)
{
    var validator = new AddEmployeeValidator();
    var validRes = validator.Validate(addEmployee);
    if (!validRes.IsValid)
    {
        //first error message
        Console.WriteLine(validRes.Errors.FirstOrDefault());
        //Console.WriteLine(validRes.Errors.FirstOrDefault().ErrorMessage);
        ////all error messages
        //Console.WriteLine(validRes.ToString(","));
        //Console.WriteLine(string.Join(",", validRes.Errors.Select(x => x.ErrorMessage)));
        //Console.WriteLine(string.Join(",", validRes.Errors));
    }
    //save code ...
}

As you can see, we just created an instance of the validator and called the Validatemethod by passing the addEmployee object which we want to validate.

The Validate method returns a ValidationResult object. It contains two properties, one is IsValid that says whether the validation succeeded or not, while the other one is Errors, that contains the details about any validation failures.

The above sample shows you how to get the first error message and all error messages. You can return the message(s) based on your requirement. We only need two steps to use this library.

There are many useful features of Fluent Validation, such as chaining validators.

RuleFor(x => x.EmployeeName)
      .NotEmpty()
      .NotEqual("catcher")
      .WithMessage("employee name cannot be null");  

We can combine lots of validators for a property.

Comments

Popular posts from this blog

How To Implement NLog With WebAPI In Asp.Net(C#).

What is NLog? NLog is a flexible and free logging platform for various .NET platforms, including .NET standard. NLog is easy to apply and it includes several targets (database, file, event viewer). Which platform support it? .NET Framework 3.5, 4, 4.5, 4.6 & 4.7 .NET Framework 4 client profile Xamarin Android Xamarin iOS Windows Phone 8 Silver light 4 and 5 Mono 4 ASP.NET 4 (NLog.Web package) ASP.NET Core (NLog.Web.AspNetCore package) .NET Core (NLog.Extensions.Logging package) .NET Standard 1.x - NLog 4.5 .NET Standard 2.x - NLog 4.5 UWP - NLog 4.5 There are several log levels. Fatal : Something terrible occurred; the application is going down  Error : Something fizzled; the application might possibly proceed Warn : Something surprising; the application will proceed  Info : Normal conduct like mail sent, client refreshed profile and so on.  Debug : For troubleshooting; the executed question, the client confirmed, ...

Generating serial numbers and keys in Asp.net(C#).

here we are using GUID for generate serial numbers and GUID is always unique. Example format: XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX. Guid SerialKeyGuid = Guid.NewGuid(); string AccessKey = SerialKeyGuid.ToString("N"); string AccessKeyLength = AccessKey.Substring(0, 28).ToUpper(); char[] serialArray = AccessKeyLength.ToCharArray(); string SerialNumber = ""; int P = 0; for (int B = 0; B < 28; B++) {                 for (P = B; P < 4 + B; P++)                 {                     SerialNumber += serialArray[P];                 }                 if (P == 28)                 {                     break;                 }         ...

Extracting Values from PDFs in .NET Core 8 without ASP.NET

Extracting data from PDF files is a common necessity for various tasks such as data analysis, content indexing, and information retrieval. While ASP.NET Core 8 offers robust tools for PDF manipulation, there are instances where developers may prefer alternatives for flexibility or specific project requirements. In this article, we'll explore how to extract values from PDF files within the .NET Core 8 ecosystem without relying on ASP.NET, using the PdfSharpCore library. We'll provide a step-by-step guide along with examples in C# to demonstrate how to accomplish this task effectively. Understanding PdfSharpCore: PdfSharpCore is a popular .NET library for PDF document manipulation. It provides functionalities to create, modify, and extract content from PDF files. In this guide, we'll focus on utilizing PdfSharpCore to extract text from PDF documents. Installing PdfSharpCore: Before we can start using PdfSharpCore in our .NET Core application, we need to install the PdfSharpCo...