日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core 添加统一模型验证处理机制

發(fā)布時(shí)間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core 添加统一模型验证处理机制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.前言

模型驗(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。