Skip to content

teamolhuang/BeingValidated

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BeingValidated


Nuget

A small tool, mainly for input object (request model, etc.) validation, I personally wrote and used in business projects. Its main purpose is to have validation codes more uniformed, and can be also used to construct a main method running multiple minor methods.

It targets .NET Standard 2.0 .

Usage


To start validating with an IBeingValidated, use .StartValidate() or .StartValidateElements(). For example, let's say we already defined a class GetUserRequest, and receives it on an endpoint we're writing. We then can validate the input like this

GetUserRequest input = ...; // accepted from client
GetUserResponse response = new();

bool isValid = input.StartValidate()
                    .Validate(i => i.UserId > 0,
                              i => response.AddError($"ID ({i.UserId}) not valid!"))
                    .Validate(i => i.MustProvide != null,
                              _ => response.AddError("MustProvide must be provided!")
                    .IsValid();

There is also ValidateAsync() for running async methods.

bool isValid = await input.StartValidate()
                    .Validate(i => i.UserId > 0,
                              i => response.AddError($"ID ({i.UserId}) not valid!"))
                    .ValidateAsync(async i => await dbContext.User.AnyAsync(u => u.Id == i.UserId),
                                         i => response.AddError($"ID ({i.UserId}) not found!",
                                         e => response.AddError($"DB Query failed: {e.Message}")
                    .IsValid();

A Validate(), or ValidateAsync() provides 3 parameters, listed in the order of examples above:

  • Validation method
  • OnFail - method to execute when validation failed (optional)
  • OnException - method to execute when validation throws (optional)

Usage - enumerable


To validate an enumerable, you can either use the .StartValidate() above to validate the emuerable object, or use .StartValidateElements() to validate every element in it.

Let's say we defined a GetUsersRequest, and there's a IEnumerable<int> IdList in it.

GetUsersRequest input = ...; // accepted from client
GetUsersResponse response = new();

bool isValid = input.IdList.StartValidateElements()
                    .Validate(i => i > 0,
                              i => response.AddError($"ID ({i}) not valid!"))
                    .IsValid();

Say there are 5 integers in the list, and 3 of them are invalid - i > 0 will be called 5 times, and AddError() will be called 3 times.

ValidateAsync() also supports it.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages