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 See Logs Of Dropped Tables From The Database in MS SQL.

Here, I will explain you how you can see logs of users. Step 1 : First, create a new database with name "test". Step 2 : Create a new table. Step 3 : Now, go and drop the table by running the following command. Step 4 : Now, select your database under Object Explorer and go to Reports >> Standard Reports >> Schema Changes History. Step 5 : You will then see the schema change history. The report will show you who has dropped this table. Finally, you can locate the user activity with the help of log.

How To Deploy .net Core Application On Linux

Here, I can explain steps to deploy .net core application on linux machine. Step 1 - Publish your .net Core application: First, create a .net core application on VS; you can make an MVC project or Web API project and if you already have an existing project, then open it. Right Click on your project Click on publish Now create a new publish profile, and browse the folder where you want to publish your project dll Click on publish so it will create your dll in the folder Step 2 - Install required .net Module on Linux: Now we have our web application dll and now we need to host it on the Linux environment. First, we need to understand how the deployment works in Linux. .Net applications run on Kestrel servers and we run Apache or Nginx server in Linux environments, which acts as a proxy server and handles the traffic from outside the machine and redirects it to the Kestrel server so we will have Apache or Nginx server as the middle layer. In this article, we will use Apache as a proxy ser

List Of Commonly Used Angular Commands

1) To get the npm version,    npm -v 2) To get the node version,    node -v 3) To get the Angular version,    ng v  4) To get the Jasmine version,    jasmine -v  5) To get the Karma version,    karma --version  6) To install Angular CLI,    npm install @angular/cli -g   npm install @angular/cli 7) To install the next version of Angular CLI, v   npm install @angular/cli@next  8) To get help in the terminal,    ng help 9) To create a new project in Angular,    ng new project-name  10) To skip external dependencies while creating a new project,    ng new project-name --skip-install  11) To run the Angular project,   ng serve (or) npm start (or) ng serve --force  12) Dry Run,   ng new project-name --dry-run 13) To create a new component in the Angular Project,   ng generate component component-