有時在 ASP.NET 裡要驗證資料,通常都是寫很多的判斷式,但這樣有可讀性降低及不好維護的缺點,最近發現 FluentValidation 是一個還不錯的解決方案。

以下示範如何使用 FluentValidation,首先定義一個 member 類別:

public class Member
{
    public string ID { get; set; } = string.Empty;
    public string Account { get; set; } = string.Empty;
    public string NickName { get; set; } = string.Empty;
}

接下來定義一個 Validator:

public class MemberValidator : AbstractValidator<Member>
{
    public MemberValidator() 
    {
    }
}

接下來加上驗證邏輯,最簡單的方式如下:

public MemberValidator() 
{
    RuleFor(member => member.Account).NotNull().NotEmpty();
}

當然這是內建的方法,也可以自行定義:

public MemberValidator() 
{
    RuleFor(member => member.Account).NotNull().NotEmpty();
    RuleFor(member => member.NickName).Must(CheckNickName).WithMessage("Please specify a valid NickName");
}

private bool CheckNickName(string nickName)
{
    if (string.IsNullOrEmpty(nickName))
    {
        return false;
    }
    return true;
}

定義之後,使用方式如下:

var validator = new MemberValidator();
Member member = new Member
{
    Account = string.Empty,
    NickName = "Peter Liang",
    ID = Guid.NewGuid().ToString(),
};
var result = validator.Validate(member);
Console.WriteLine(result.IsValid);
foreach (var error in result.Errors)
{
    Console.WriteLine(error.ErrorMessage);
}

參考資料