当前位置:首页 > 日记 > 正文

asp.net core MVC 过滤器之ActionFilter过滤器 | 2

asp.net core MVC 过滤器之ActionFilter过滤器 | 2

本系类将会讲解asp.net core MVC中的内置过滤器的使用,将分为以下章节

  asp.net core MVC 过滤器之ExceptionFilter过滤器(一)

  asp.net core MVC 过滤器之ActionFilter过滤器(二)

  asp.net core MVC 过滤器之ResultFilter过滤器(三)

  asp.net core MVC 过滤器之ResourceFilter过滤器(四)

  asp.net core MVC 过滤器之AuthorizationFilter过滤器(五)

简介

Action过滤器将在controller的Action执行之前和之后执行相应的方法。

实现一个自定义Action过滤器

自定义一个全局异常过滤器需要实现IActionFilter接口

public class ActionFilter : IActionFilter{  public void OnActionExecuted(ActionExecutedContext context)  {    Console.WriteLine("action执行之后");  }  public void OnActionExecuting(ActionExecutingContext context)  {    Console.WriteLine("action执行之前");  }}

IActionFilter需要实现两个方法OnActionExecuted,OnActionExecuting。OnActionExecuting将在Action之前执行,OnActionExecuted在Action之后执行。

知道原理之后我们们就可以利用其特性来简化我们的代码,在MVC中一个重要的概念就时Model验证,我们定义Model约束,然后在Action中验证Model是否绑定成功,我们的Action中重复地写如下代码

[HttpGet]public ActionResult Get(){  if (!ModelState.IsValid) return BadRequest("参数错误!");}

这样重复的代码不仅增加代码复杂都也不美观,我们可以在ActionFilter中自动完成

public void OnActionExecuting(ActionExecutingContext context){  if (context.ModelState.IsValid) return;  var modelState = context.ModelState.FirstOrDefault(f => f.Value.Errors.Any());  string errorMsg = modelState.Value.Errors.First().ErrorMessage;  throw new AppException(errorMsg);}

当Model绑定错误时,我们抛出异常信息,并在上一章节的异常过滤器ExceptionFilter中捕获,返回错误信息给请求方。

我们也可以利用ActionFilter的特性来记录Action的执行时间,当Action执行时间过慢时输出警告日志

public class ActionFilter : IActionFilter{  public void OnActionExecuted(ActionExecutedContext context)  {    var httpContext = context.HttpContext;    var stopwach = httpContext.Items[Resources.StopwachKey] as Stopwatch;    stopwach.Stop();    var time = stopwach.Elapsed;    if (time.TotalSeconds > 5)    {      var factory = context.HttpContext.RequestServices.GetService<ILoggerFactory>();      var logger = factory.CreateLogger<ActionExecutedContext>();      logger.LogWarning($"{context.ActionDescriptor.DisplayName}执行耗时:{time.ToString()}");    }  }  public void OnActionExecuting(ActionExecutingContext context)  {    var stopwach = new Stopwatch();    stopwach.Start();    context.HttpContext.Items.Add(Resources.StopwachKey, stopwach);  }}

上面的代码利用使用HttpContext传递一个Stopwach来计算action的执行时间,并在超过5秒时输出警告日志。 

注册全局过滤器

注册方法与ExceptionFinter相同。找到系统根目录Startup.cs文件,修改ConfigureServices方法如下

services.AddMvc(options =>      {        options.Filters.Add<ActionFilter>();      });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

fireworks切片功能使用方法图解

fireworks切片功能使用方法图解

切片,使用方法,功能,电脑软件,fireworks,网页三剑客之一的fireworks,小编教大家简单的切片功能,对于新手来说,可以参考本文,希望能对大家有所帮助!方法/步骤1、首先肯定是打开Fireworks,当然如果没有装的话可以先从百度下载然后安装下。2、然后点…

jQuery+ajax实现修改密码验证功能

jQuery+ajax实现修改密码验证功能

修改密码,验证,详解,实例,功能,废话不多说了,直接给大家贴代码了,具体代码如下所示:<script type="text/JavaScript"> //获取url中的参数 $(function(){ var userName = window.location.href; var aa = userName.indexOf("="); …

2013版ppt怎么使用放大镜功能

2013版ppt怎么使用放大镜功能

功能,技巧,电脑软件,ppt,  ppt中有很多强大的功能,例如放大镜功能,我们可以通过此功能对图片的某部分或内容进行放大,那么,你知道怎样使用放大镜功能吗?下面就让小编告诉你 ppt2013怎样使用放大镜功能的方法,不懂的朋友会请多多学习哦。ppt201…

JS动态生成年份和月份实例代码

JS动态生成年份和月份实例代码

实例代码,动态生成,年份,电脑软件,JS,先看下js动态生成的年份,具体代码如下所示:function makeYear() { var year = document.getElementById("year"); var my = new Date(); var endYear = my.getFullYear();// 获取当前年份 for …

详解PHP字符串替换str_replace |

详解PHP字符串替换str_replace |

函数,字符串替换,四种,详解,电脑软件,下面通过本文给大家分享PHP字符串替换str_replace()函数4种用法,具体内容如下所示:mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )该函数返回一个字符串或者…

Asp.net MVC 对所有用户输入的字符

Asp.net MVC 对所有用户输入的字符

字段,字符串,用户,输入,方法,经常需要对用户输入的数据在插入数据库或者判断之前做Trim处理,针对每个ViewModel的字段各自做处理是我们一般的想法。最近调查发现其实也可以一次性实现的。MVC4.6中实现方式1,实现IModelBinder接口,创建自定义M…

详谈for循环里面的break和continue

详谈for循环里面的break和continue

语句,循环,电脑软件,continue,break,break语句哇,我已经找到我要的答案了,我不需要进行更多的循环了!比如,寻找第一个能被5整除的数:for循环中,如果遇见了break语句,这个for循环就会立即终止,不在进行其他的迭代了。for(var i = 1 ; i <= 100; i++)…

PHP中Trait及其应用详解

PHP中Trait及其应用详解

详解,及其应用,电脑软件,PHP,Trait,从PHP的5.4.0版本开始,PHP提供了一种全新的代码复用的概念,那就是Trait。Trait其字面意思是”特性”、”特点”,我们可以理解为,使用Trait关键字,可以为PHP中的类添加新的特性。 熟悉面向对象的都知道,软…

PS怎么设计一款漂亮的教师节艺术字

PS怎么设计一款漂亮的教师节艺术字

教师节,漂亮,艺术字,电脑软件,PS,Photoshop是我们日常工作学习中,经常用到的一款图像处理软件,今天给大家分享一下,怎么用PS制作漂亮的艺术字效果。主要用到图片背景素材和透明的艺术字,还有一些发光星星作为点缀效果。软件名称:Adobe Photoshop…

excel2013计算百分比的方法excel20

excel2013计算百分比的方法excel20

计算,方法,百分比,电脑软件,strong,  在Excel中经常需要计算数据的值得百分比。而因为2013的界面有比较大的改动,很多朋友都不知道该如何入手。下面是小编整理的excel2013计算百分比的方法以供大家阅读。excel2013计算百分比的方法步骤1:假…

jQuery 添加样式属性的优先级别方

jQuery 添加样式属性的优先级别方

方法,样式属性,级别,推荐,电脑软件,jQuery类中添加多个属性$('#five .a').css({ color:'blue', border:'2px solid green', background:'blue'});jQuer为元素添加类$('#five .a').addClass('funny');HTML code<style>.funny…

AI图形怎么做布尔运算? ai布尔运算

AI图形怎么做布尔运算? ai布尔运算

布尔运算,图形,教程,怎么做,电脑软件,ai里的布尔运算怎么做?今天我们就来看看详细的教程,是基础教程,请继续关注。软件名称:Adobe Illustrator CS6 (AI cs6) 精简绿色中文版(32位+64位)软件大小:205MB更新时间:2014-05-111、打开ai,新建文件,选择&l…