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

简介

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>();});

相关文章: 

  • .NET Core 2.0 正式发布信息汇总

  • .NET Standard 2.0 特性介绍和使用指南

  • .NET Core 2.0 的dll实时更新、https、依赖包变更问题及解决

  • .NET Core 2.0 特性介绍和使用指南

  • Entity Framework Core 2.0 新特性

  • 体验 PHP under .NET Core

  • .NET Core 2.0使用NLog

  • 升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署

  • 解决Visual Studio For Mac Restore失败的问题

  • ASP.NET Core 2.0 特性介绍和使用指南

  • .Net Core下通过Proxy 模式 使用 WCF

  • .NET Core 2.0 开源Office组件 NPOI

  • ASP.NET Core Razor页面 vs MVC

  • Razor Page–Asp.Net Core 2.0新功能  Razor Page介绍

  • MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例

  • .NET Core 2.0迁移技巧之web.config配置文件

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

  • ASP.NET Core 使用Cookie验证身份

原文地址:http://www.cnblogs.com/huanent/p/7421220.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【最全最详细】publiccms使用教程

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂拉取项目&#xff08;项目部署阶段&#xff09;1.首先需要从gitee中拉取项目&#xff0c;地址为&#xff1a;public cms项目地址 &#xff0c;在idea中点击文件--》新建--》来自版本控制的项…

越努力越幸运,三年了!!!

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂”今天非常的开心&#xff0c;因为考了三年的驾照终于考完了。在大厅候考的时候&#xff0c;从10.40等到了1.40,坐在下面能看到LED上有自己的名字&#xff0c;但是前面等待的有200多人………

为什么我们要使用Async、Await关键字

前不久&#xff0c;在工作中由于默认&#xff08;xihuan&#xff09;使用Async、Await关键字受到了很多质问&#xff0c;所以由此引发这篇博文“为什么我们要用Async/Await关键字”&#xff0c;请听下面分解&#xff1a; Async/Await关键字 Visual Studio&#xff08;.net fra…

一次惊险的跳槽面试经历(阿里/美团/头条/网易/有赞...)

转载自 一次惊险的跳槽面试经历&#xff08;阿里/美团/头条/网易/有赞...) 每次说因为生活成本的时候面试官都会很惊奇&#xff0c;难道有我们这里贵&#xff1f;好想直接给出下面这张图&#xff0c;厦门的房价真的好贵好贵好贵。。。 面试过程 有兴趣加入阿里的欢迎发简历…

利用bladex+avue实现一对多的关系

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂”今天&#xff0c;记录一篇技术文章吧&#xff0c;也是解决了好久才解决掉的&#xff08;说来也惭愧&#xff09;。涉及技术前端&#xff1a;vue&#xff0c;element ui后端框架&#xff…

.NET中的高性能应用

本文要点 .NET自4.0以来得到了大幅的性能提升&#xff0c;很值得重新考虑一下基于旧版本.NET框架所做的假定。在讨论性能时垃圾回收是个重复出现的主题&#xff0c;它带来了许多CLR和语言的提升&#xff0c;比如引用返回和ValueTask在内存分配上更细粒度度量的性能分析API会成…

利用bladex+avue实现下拉数据源展示

“ 大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;????雄雄的小课堂???? ”昨天给大家整理了下如何使用bladex实现多表查询的方法&#xff0c;今天我们趁热打铁&#xff0c;顺便看看下拉列表的实现。 需求 我们经常会有这样的需求&#xff0c;…

汇编语言(一)之反转字符串输出

BASED ADDRESSING反转输出 程序运行&#xff1a; 代码&#xff1a; datas segmentstring db BASED ADDRESSING$ count dw $-string-1 ;计算string的长度&#xff0c;$为当前地址&#xff0c;-1为去掉字符串结束符$srcsTip db SRC string:$ dstsTip db 0…

前后端分离项目部署上线详细教程

“ 大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;????雄雄的小课堂???? ”今天&#xff0c;给大家分享的是&#xff0c;SpringbootVue项目如何部署上线的详细步骤。 代码编辑器 前端&#xff1a;Webstorm 2021.1.2 后端&#xff1a;IntelliJ …

.Net Core2.0下使用Dapper遇到的问题

今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上&#xff0c;在迁移的过程中也遇到一些很有意思的问题&#xff0c;值得和大家分享一下。下面我会还原迁移的每一个过程&#xff0c;以及在此过程中遇到的问题和处理这些问题的方法。 一、迁移前的…

汇编语言(二)之数值求和

输入一串数字&#xff0c;求和 运行结果&#xff1a; 程序代码&#xff1a; datas segmentx db ? y db ? z db ?xInputPrompt db Enter a number x$ yInputPrompt db 0dh,0ah,Enter a number y$ zOutputPrompt db 0dh,0…

avue中怎样隐藏新增和编辑的按钮

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;????雄雄的小课堂????”????‍♂️今天给大家分享的技术是&#xff1a;avue中如何设置新增和编辑的按钮隐藏掉。????‍????涉及技术????前端&#xff1a;avue????后端&…

.NET跨平台实践:Linux .Net Core自宿主应用程序瘦身记

一&#xff0c;.NET Core 自宿主应用程序个头有点大 发布.NET Core应用程序有两个方式&#xff0c;一种是“便携式”&#xff0c;一种是“自宿主式”。便携式发布时&#xff0c;目标程序不带.net core运行环境&#xff0c;所以“个头”很小&#xff0c;可能只有几十K几百K字节…

汇编语言(三)之判断数值是否大于42H并统计个数

在内存中一串数值&#xff0c;判断数值是否大于42H并统计个数 程序运行&#xff1a; 代码&#xff1a; datas segmentidata equ 100hnums db idata dup(41h,42h,43h,42h,41h,43h,30h)count dw $-numsup dw 0down dw 0upNumber …

idea打war的问题

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;&#x1f449;雄雄的小课堂&#x1f448;。 &#x1f468;‍&#x1f3eb;前言 今天&#xff0c;记录个到现在为止还没搞清的问题&#xff0c;这个问题浪费了我几个小时的时间&#xff0c;基本上昨天晚上…

汇编语言(四)之比较字符串

输入两个字符串&#xff0c;比较字符串是否相同 程序运行&#xff1a; 代码&#xff1a; datas segmentstring1MaxLength db 0ffh,0 string1 db 100h dup(?)string1Number dw 0 string2MaxLength db 0ffh,0 string2 db 100h dup(?) string2Number…

.NET平台微服务项目汇集

最近博客园出现了一篇文章《微服务时代之2017年五军之战&#xff1a;Net PHP谁先死》&#xff0c;掀起了一波撕逼&#xff0c;作者只是从一个使用者的角度来指点江山&#xff0c;这个姿势是不对的。.NET Core就是专门针对模块化的微服务架构而设计&#xff0c;在微服务架构这方…

idea打war包时,JDK版本的问题解决方式

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;????雄雄的小课堂????。”????‍????前言今天&#xff0c;记录个到现在为止还没搞清的问题&#xff0c;这个问题浪费了我几个小时的时间&#xff0c;基本上昨天晚上啥也没干&#xff0…

汇编语言(五)之数组中正数和负数分离

将数组中的正数和负数分离到两个数组 程序运行&#xff1a; 代码&#xff1a; datas segmenta dw -1,2,3,4,-2,-3,5,6,7,8,9,-10,13,15,-5,-24,-36,34,53,-90count dw ($-a)/2p dw 20 dup(?)n dw 20 dup(?)pNumber dw 0…

dotnet使用Selenium执行自动化任务

如果要做百度文库&#xff0c;百度贴吧&#xff0c;百度知道签到&#xff0c;你&#xff0c;会怎么做&#xff1f;前不久我还会觉得这好像太麻烦了&#xff0c;now,soeasy。 自动化测试工具&#xff1a;Selenium Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行…