溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET Core怎么添加統(tǒng)一模型驗證處理機制

發(fā)布時間:2021-02-18 10:58:39 來源:億速云 閱讀:121 作者:小新 欄目:開發(fā)技術

小編給大家分享一下ASP.NET Core怎么添加統(tǒng)一模型驗證處理機制,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

一.前言

模型驗證自ASP.NET MVC便有提供,我們可以在Model(DTO)的屬性上加上數據注解(Data Annotations)特性,在進入Action之前便會根據數據注解,來驗證輸入的數據是否合法,下面介紹以下如何統(tǒng)一處理驗證并返回錯誤信息。

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

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

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

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

1.首先定義一個通用的返回結果類:

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

2.定義一個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>();
 });
}

三.測試

定義一個DTO:

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

使用Postman來測試接口:

ASP.NET Core怎么添加統(tǒng)一模型驗證處理機制

可以看出已經成功驗證!設置了商品數量的取值范圍為1~999之間,而我輸入了9999被成功攔截并返回錯誤信息.

看完了這篇文章,相信你對“ASP.NET Core怎么添加統(tǒng)一模型驗證處理機制”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI