FluentValidation
Posted 兴杰(stooges.com.my)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FluentValidation相关的知识,希望对你有一定的参考价值。
refer :
https://www.exceptionnotfound.net/custom-validation-in-asp-net-web-api-with-fluentvalidation/
https://github.com/JeremySkinner/FluentValidation
这是一个开源的小工具,用来出来 model validation
MVC,Web Api 都可以使用, Entity Framework 我就不太清楚
我只用到 Web Api 的 ^^
这个工具是可以和原本的 data annotations validation 一起使用的
我是因为 ComplexType 需要不同的验证和需要 conditional 验证才选择这个工具的.
nuget :
Install-Package FluentValidation.WebAPI
public static partial class Config { public static void Register(HttpConfiguration config) { FluentValidationModelValidatorProvider.Configure(config); } }
基本用法 :
[Validator(typeof(TestModelValidator))] public class Test { public Test() { this.address = new Address(); } [Key] public int Id { get; set; } public string email { get; set; } public bool needValidAddress { get; set; } public Address address { get; set; } } public class TestModelValidator : AbstractValidator<Test> { public TestModelValidator() { RuleFor(x => x.address.text) .NotEmpty() .SetValidator(new CustomValidator<int>()) .When(o => o.needValidAddress) .WithMessage("address text required"); When(o => !string.IsNullOrWhiteSpace(o.email), () => { RuleFor(c => c.email).Matches(@"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); }); Custom(o => { return o.Id >= 10 ? new ValidationFailure("Id","more than 10") : null; }); } } public class CustomValidator<T> : PropertyValidator { public CustomValidator() : base("Property {PropertyName} contains more than 10 items!") { } protected override bool IsValid(PropertyValidatorContext context) { var list = context.PropertyValue as IList<T>; if (list != null && list.Count >= 10) { return false; } return true; } } [ComplexType] public class Address { public string text { get; set; } }
以上是关于FluentValidation的主要内容,如果未能解决你的问题,请参考以下文章
FluentValidation - 仅当值不为空时检查值是表达式
C#封装FluentValidation,用了之后通篇还是AbstractValidator,真的看不下去了