激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - .Net Core3.0 WEB API中使用FluentValidation驗證(批量注入)

.Net Core3.0 WEB API中使用FluentValidation驗證(批量注入)

2020-06-23 14:07往事隨灬鋒 ASP.NET教程

這篇文章主要介紹了.Net Core3.0 WEB API中使用FluentValidation驗證(批量注入),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

為什么要使用FluentValidation

1.在日常的開發中,需要驗證參數的合理性,不緊前端需要驗證傳毒的參數,后端也需要驗證參數
2.在領域模型中也應該驗證,做好防御性的編程是一種好的習慣(其實以前重來不寫的,被大佬教育了一番)
3.FluentValidation 是.NET 開發的驗證框架,開源,主要是簡單好用,內置了一些常用的驗證器,可以直接使用,擴展也很方便

使用FluentValidation

1.引入FluentValidation.AspNetCore NuGet包
2.建立需要驗證的類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/// <summary>
/// 創建客戶
/// </summary>
public class CreateCustomerDto
{
  /// <summary>
  /// 客戶姓名
  /// </summary>
  public string CustomerName { get; set; }
  /// <summary>
  /// 客戶年齡
  /// </summary>
  public string CustomerAge { get; set; }
  /// <summary>
  /// 客戶電話
  /// </summary>
  public string CustomerPhone { get; set; }
  /// <summary>
  /// 客戶地址
  /// </summary>
  public Address CustomerAddress { get; set; }
}
 
/// <summary>
/// 驗證
/// </summary>
public class CreateCustomerDtoValidator : AbstractValidator<CreateCustomerDto>
{
  public CreateCustomerDtoValidator()
  {
    RuleFor(x => x.CustomerName)
       .NotEmpty()
       .WithMessage("客戶姓名不能為空");
    RuleFor(x => x.CustomerPhone)
       .NotEmpty()
       .WithMessage("客戶電話不能為空");
 
  }
}

3.統一返回驗證的信息,ResponseResult為全局統一參數返回的類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/// <summary>
/// 添加AddFluentValidationErrorMessage
/// </summary>
/// <returns></returns>
public DependencyInjectionService AddFluentValidationErrorMessage()
{
  _services.Configure<ApiBehaviorOptions>(options =>
  {
    options.InvalidModelStateResponseFactory = (context) =>
    {
      var errors = context.ModelState
        .Values
        .SelectMany(x => x.Errors
              .Select(p => p.ErrorMessage))
        .ToList();
      var result = new ResponseResult<List<string>>
      {
        StatusCode = "00009",
        Result = errors,
        Message = string.Join(",", errors.Select(e => string.Format("{0}", e)).ToList()),
        IsSucceed = false
      };
 
      return new BadRequestObjectResult(result);
    };
  });
  return _dependencyInjectionConfiguration;
}

4.注入驗證的類

使用builder.RegisterType().As<IValidator>();比較麻煩每次新增都需要添加一次注入
所以我們使用批量的注入,來減少麻煩,通過反射獲取所有的驗證的類批量注入

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/// <summary>
/// 添加MVC
/// </summary>
/// <returns></returns>
public DependencyInjectionService AddMvc()
{
  _services.AddControllers(options =>
  {
    options.Filters.Add(typeof(LogHelper));
  }).AddJsonOptions(options =>
  {
    //忽略循環引用
    //options.JsonSerializerOptions.IgnoreReadOnlyProperties = true;
  }).AddFluentValidation(options =>
  {
    options.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
    var validatorList = GetFluentValidationValidator("ConferenceWebApi");
    foreach (var item in validatorList)
    {
      options.RegisterValidatorsFromAssemblyContaining(item);
    }
  });
  return _dependencyInjectionConfiguration;
}
 
/// <summary>
/// 獲取所有的FluentValidation Validator的類
/// </summary>
public IEnumerable<Type> GetFluentValidationValidator(string assemblyName)
{
  if (assemblyName == null)
    throw new ArgumentNullException(nameof(assemblyName));
  if (string.IsNullOrEmpty(assemblyName))
    throw new ArgumentNullException(nameof(assemblyName));
 
  var implementAssembly = RuntimeHelper.GetAssembly(assemblyName);
  if (implementAssembly == null)
  {
    throw new DllNotFoundException($"the dll ConferenceWebApi not be found");
  }
  var validatorList = implementAssembly.GetTypes().Where(e => e.Name.EndsWith("Validator"));
  return validatorList;
}

5.使用起來就十分簡單了

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <summary>
/// 創建客戶
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResponseResult<string>> CreateCustomer([FromBody] CreateCustomerDto input)
{
  var createCustomerCommand = new CreateCustomerCommand(input.CustomerName,input.CustomerAge,input.CustomerPhone,input.CustomerAddress);
  await _commandService.SendCommandAsync(createCustomerCommand);
  var result = new ResponseResult<string>
  {
    IsSucceed = true,
    Result = "創建客戶成功!"
  };
  return result;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/lifeng618/p/11988236.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 国产在线观看 | zzzzzzzxxxxxx日本人 | 欧美国产91| 亚洲免费在线视频 | 国产xxxx岁13xxxxhd | 在线观看一区二区三区四区 | 久久国产精品免费视频 | 国产一区二区三区四区五区在线 | 国产一级毛片视频在线! | 国产一级毛片高清视频 | 婷婷久久综合九色综合色多多蜜臀 | 欧美日韩免费看 | 欧美成人一区二区三区 | 日日影视| 日本欧美国产 | 啊哈不要啊 | 久久婷婷一区二区三区 | 国产一区二区三区在线免费 | 日韩区在线 | 国产羞羞视频在线观看免费应用 | 久综合| 成人一级黄色片 | 电视剧全部免费观看 | 日韩精品中文字幕一区二区三区 | 欧美日韩艺术电影在线 | 欧美国产一区二区三区 | 在线观看中文字幕国产 | 欧美囗交 | 久久精品亚洲精品国产欧美kt∨ | 日本一区二区在线 | 欧美精品国产综合久久 | 天天夜天天操 | 狠狠久久伊人中文字幕 | 国产亚洲精品久久久久婷婷瑜伽 | 欧美天堂一区 | 成人国产精品一区二区毛片在线 | 99精品国产在热久久婷婷 | 国产精品剧情一区二区三区 | 九草网| 亚洲人成网在线观看 | 黄色片快播 |