欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一.前言

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

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

我們?cè)谂袛囹?yàn)證狀態(tài)時(shí)一般會(huì)在Action里判斷ModelState.IsValid是否為true。

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

如果我們?cè)诿總€(gè)需要驗(yàn)證的Action里面都寫這個(gè)判斷豈不是太麻煩,我們是否可以在進(jìn)入所有的Action之前都進(jìn)行驗(yàn)證,如果錯(cuò)誤,就直接返回錯(cuò)誤信息,不去執(zhí)行Action了,當(dāng)然時(shí)可以的。我們可以利用MVC的ActionFilter即Action過(guò)濾器,在執(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.配置過(guò)濾器

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

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

三.測(cè)試

定義一個(gè)DTO:

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

使用Postman來(lái)測(cè)試接口:

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

總結(jié)

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

相關(guān)文章

最新評(píng)論