最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET Core如何添加統(tǒng)一模型驗(yàn)證處理機(jī)制詳解

 更新時(shí)間:2018年05月06日 14:45:56   作者:曉晨Master  
這篇文章主要給大家介紹了關(guān)于ASP.NET Core如何添加統(tǒng)一模型驗(yàn)證處理機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一.前言

模型驗(yàn)證自ASP.NET MVC便有提供,我們可以在Model(DTO)的屬性上加上數(shù)據(jù)注解(Data Annotations)特性,在進(jìn)入Action之前便會根據(jù)數(shù)據(jù)注解,來驗(yàn)證輸入的數(shù)據(jù)是否合法,下面介紹以下如何統(tǒng)一處理驗(yàn)證并返回錯(cuò)誤信息。話不多說了,來一起看看詳細(xì)的介紹吧。

二.Action過濾器實(shí)現(xiàn)統(tǒng)一驗(yàn)證

我們在判斷驗(yàn)證狀態(tài)時(shí)一般會在Action里判斷ModelState.IsValid是否為true。

public IActionResult Create([FromBody]CreateOrderDto dto)
{
 if(ModelState.IsValid)
 {
  //TODO:...
 }
}

如果我們在每個(gè)需要驗(yàn)證的Action里面都寫這個(gè)判斷豈不是太麻煩,我們是否可以在進(jìn)入所有的Action之前都進(jìn)行驗(yàn)證,如果錯(cuò)誤,就直接返回錯(cuò)誤信息,不去執(zhí)行Action了,當(dāng)然時(shí)可以的。我們可以利用MVC的ActionFilter即Action過濾器,在執(zhí)行Action之前統(tǒng)一判斷處理。

1.首先定義一個(gè)通用的返回結(jié)果類:

public class XcHttpResult
{
 public string Msg { get; set; }
 public bool Result { get; set; }
}

2.定義一個(gè)ActionFilter

public class XcActionFilter : IActionFilter
{
 public void OnActionExecuting(ActionExecutingContext context)
 {
 if (!context.ModelState.IsValid)
 {
  XcHttpResult result = new XcHttpResult() { Result = false };
  foreach (var item in context.ModelState.Values)
  {
  foreach (var error in item.Errors)
  {
   result.Msg += error.ErrorMessage + "|";
  }
  }
  context.Result = new JsonResult(result);
 }
 }
 public void OnActionExecuted(ActionExecutedContext context)
 {
 }
}

3.配置過濾器

在Startup.cs里配置過濾器,使其生效:

public void ConfigureServices(IServiceCollection services)
{
 services.AddMvc(options =>
 {
 options.Filters.Add<XcActionFilter>();
 });
}

三.測試

定義一個(gè)DTO:

public class CreateOrderDto
{
 [Required(ErrorMessage = "商品ID不得為空")]
 public string ProductId { get; set; }
 [Required(ErrorMessage = "購買商品數(shù)量不得為空")]
 [Range(1, 999, ErrorMessage = "購買商品數(shù)量必須介于1~999之間")]
 public int Number { get; set; } = 0;
 [Required(ErrorMessage = "用戶ID不得為空")]
 public string UserId { get; set; }
}

使用Postman來測試接口:

可以看出已經(jīng)成功驗(yàn)證!設(shè)置了商品數(shù)量的取值范圍為1~999之間,而我輸入了9999被成功攔截并返回錯(cuò)誤信息.

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

固镇县| 台东市| 凤台县| 子洲县| 田东县| 丽江市| 北票市| 察雅县| 平罗县| 上饶县| 斗六市| 赣州市| 泸溪县| 株洲县| 双柏县| 太康县| 梁山县| 酒泉市| 于田县| 青川县| 民权县| 洪湖市| 双鸭山市| 鹿邑县| 同德县| 淮安市| 清徐县| 澄江县| 江都市| 蚌埠市| 水城县| 宜兰县| 成都市| 得荣县| 汪清县| 那曲县| 邢台市| 遵义县| 公主岭市| 共和县| 宁陵县|