龙空技术网

asp.net core mvc ActionFilter实现自定义验证

混子一工 96

前言:

目前大家对“netaction调用action”都比较看重,咱们都想要了解一些“netaction调用action”的相关知识。那么小编也在网上搜集了一些关于“netaction调用action””的相关内容,希望咱们能喜欢,同学们一起来了解一下吧!

找了好久都没找到官方默认的框架里对于验证方法 IsVaild 在哪里调用的,所以不知道在哪里修改这个合适。

我想的和是自己弄一个验证的类,很小,但是可以很随意,官方的那种一层嵌套一层,实在找不到在哪里。。

自己弄得就是可以自己定义调用的时机,因为不一定是给B/S用的。 有些地方是其他方式的,但是也需要验证。而且官方的接口是IsValid,我想做的是IsValidAsync,当然官方的也有支持异步,只是这是一个很小的模块,自己弄的话感觉比找文档还快。那么在mvc这里怎么样完成这个验证呢。按照mvc的分层,感觉是过滤器比较合适,因为到了Action这里调用的时候可以拿到已经绑定过的model啥的了,所以,在这里插入一个过滤器,感觉会很完美。ActionFilter有两种,这里只是一个调用而已,所以实现完了ValidtorHelper 后,只需要自己看着哪种舒服就用哪种就好了。全局的就是简单粗暴。区域的就是灵活,哪里需要放哪里。但是两个的实现接口都差不多,在Action调用前当然是 OnActionExecuting

public class MyValidFilter : IActionFilter   {      public void OnActionExecuted(ActionExecutedContext context)      {      }      public async void OnActionExecuting(ActionExecutingContext context)      {        ///Action参数都在这里,通过这些个可以完成验证         var models = context.ActionArguments.Values;        ///自定义的验证类         var tasklist = models.Select(z => ValidatorHelper.IsVaildAsync(z));         var relist = await Task.WhenAll(tasklist);         if (relist.Any(z => !z)) {            ///这里可以做一个统一的返回的方式,所以,Action里就不用再判断IsValid了            context.Result = new StatusCodeResult((int)HttpStatusCode.BadRequest);            return;         }      }   }

在Action前就验证了,那么后面写入数据库那些个地方的验证也就该取消掉了。

标签: #netaction调用action