日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET6之MiniAPI(二十):实体验证FluentValidation

發布時間:2023/12/4 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET6之MiniAPI(二十):实体验证FluentValidation 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為了驗證api post上來的數據的有效性,我們可以引入FluentValidation(詳見https://fluentvalidation.net)。在asp.net mvc中,使用的是模型驗證,通過在實體類上添加特性達到驗證效果。

FluentValidation的原理是通過實現AbstractValidator<T>來實現對T實體類的驗證,通過不同折Rule來驗證T中的屬性(更多驗證規則 ,參見官網),見如下實現:

public class Person {public int Id { get; set; }public string Name { get; set; }public string Tel { get; set; }public string Email { get; set; }public DateTime Birthday { get; set; }public string IDCard { get; set; }public PersonAddress Address { get; set; } } public class PersonAddress {public string Country { get; set; }public string Province { get; set; }public string City { get; set; }public string County { get; set; }public string Address { get; set; }public string Postcode { get; set; } }/// <summary> /// Person驗證 /// </summary> public class PersonValidator : AbstractValidator<Person> {public PersonValidator(IPersonService personService){RuleFor(p => p.Name).NotNull().NotEmpty();RuleFor(p => p.Email).NotNull().EmailAddress();RuleFor(p => p.Birthday).NotNull();RuleFor(p => p.IDCard).NotNull().NotEmpty().Length(18).When(p => (DateTime.Now > p.Birthday.AddYears(1))).WithMessage(p => $"出生日期為{p.Birthday},現在時間為{DateTime.Now},大于一歲,CardID值必填!");RuleFor(p => p.Tel).NotNull().Matches(@"^(\d{3,4}-)?\d{6,8}$|^[1]+[3,4,5,8]+\d{9}$").WithMessage("電話格式為:0000-0000000或13000000000");RuleFor(p => p.Address).NotNull();RuleFor(p => p.Address).SetValidator(new PersonAddressValidator());//通過調用外部方法來驗證RuleFor(p => p.Id).Must(id => personService.IsExist(id)).WithMessage(p => $"不存在id={p.Id}的用戶");} } /// <summary> /// Person Address驗證 /// </summary> public class PersonAddressValidator : AbstractValidator<PersonAddress> {public PersonAddressValidator(){RuleFor(a => a.Country).NotNull().NotEmpty();RuleFor(a => a.Province).NotNull().NotEmpty();RuleFor(a => a.City).NotNull().NotEmpty();RuleFor(a => a.County).NotNull().NotEmpty();RuleFor(a => a.Address).NotNull().NotEmpty();RuleFor(a => a.Postcode).NotNull().NotEmpty().Length(6);} }

在mini api引入FluentValidation也很簡單,可以通過注入IValidator<T>實現,也可以注放AddFluentValidation,用IValidatorFactory來獲取Validator來實現驗證,代碼如下:

using FluentValidation; using FluentValidation.AspNetCore; using System.Text;var builder = WebApplication.CreateBuilder(args); builder.Services.AddFluentValidation(); builder.Services.AddScoped<IValidator<Person>, PersonValidator>(); builder.Services.AddScoped<IPersonService, PersonService>(); var app = builder.Build();app.MapPost("/person", async (IValidator<Person> validator, Person person) =>{var result = await validator.ValidateAsync(person);if (!result.IsValid){var errors = new StringBuilder();foreach (var valid in result.Errors){errors.AppendLine(valid.ErrorMessage);}return errors.ToString();}return "OK";});app.MapPost("/person1", async (IValidatorFactory validatorFactory, Person person) => {var result = await validatorFactory.GetValidator<Person>().ValidateAsync(person);if (!result.IsValid){var errors = new StringBuilder();foreach (var valid in result.Errors){errors.AppendLine(valid.ErrorMessage);}return errors.ToString();}return "OK"; });app.MapPost("/person2", async (IValidatorFactory validatorFactory, Person person) => {var result = await validatorFactory.GetValidator(typeof(Person)).ValidateAsync(new ValidationContext<Person>(person));if (!result.IsValid){var errors = new StringBuilder();foreach (var valid in result.Errors){errors.AppendLine(valid.ErrorMessage);}return errors.ToString();}return "OK"; });app.Run();public interface IPersonService {public bool IsExist(int id); } public class PersonService : IPersonService {public bool IsExist(int id){if (DateTime.Now.Second % 2 == 0){return false;}else{return true;}} }

總結

以上是生活随笔為你收集整理的.NET6之MiniAPI(二十):实体验证FluentValidation的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。