ASP.NET Core 添加统一模型验证处理机制
一.前言
模型驗(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ò)誤信息。
二.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被成功攔截并返
原文地址:https://www.cnblogs.com/stulzq/p/8962018.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core 添加统一模型验证处理机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈Log4net在项目中如何记录日志
- 下一篇: asp.net ajax控件工具集 Au