笨鸟先飞之ASP.NET MVC系列之过滤器(05结果过滤器)
概念介绍
结果过滤器看名字就知道这个过滤器是针对方法所产生结果的,结果过滤器,主要在我们的动作方法结果返回前后执行。
如果我们需要创建结果过滤器需要实现IResultFilter接口。
namespace System.Web.Mvc
{
//
// 摘要:
// 定义结果筛选器所需的方法。
public interface IResultFilter
{
//
// 摘要:
// 在操作结果执行后调用。
//
// 参数:
// filterContext:
// 筛选器上下文。
void OnResultExecuted(ResultExecutedContext filterContext);
//
// 摘要:
// 在操作结果执行之前调用。
//
// 参数:
// filterContext:
// 筛选器上下文。
void OnResultExecuting(ResultExecutingContext filterContext);
}
}
我们看到该接口里有两个方法OnResultExecuting和OnResultExecuted,前者在动作方法结果返回前调用,后者在动作方法结果返回后调用。
OnResultExecuting
我们已经知道了OnResultExecuting方法是在动作方法结果返回之前被调用的那么我们就可以利用这个方法在这里对请求的内容追加,修改,取消,在OnResultExecuting方法中传递的参数是一个ResultExecutingContext对象,它继承于ControllerContext类,它的属性如下:
| 名称 | 类型 | 说明 |
|---|---|---|
| Cancel | bool | 获取或设置一个值,该值指示此 ResultExecutingContext 值是否为“cancel”。 |
| Result | ActionResult | 获取或设置操作结果。 |
执行OnActionExecuting方法
下面我将演示OnActionExecuting方法,首先我们还是在之前的Filter文件夹下添加一个名为 CustomResultAttribute.cs 的过滤器类,我们继承 FilterAttribute 类和 IResultFilter 接口,为了方便演示,我们简单处理,直接在返回结果输出到视图前追加一段文字
这是我们在_CustomResultAttribute.cs_ 文件中编写的代码
public class CustomResultAttribute : FilterAttribute, IResultFilter
{
public void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("<div>返回前输出</div>");
}
public void OnResultExecuted(ResultExecutedContext filterContext)
{
}
}
接着我们调用之前的方法把动作过滤器替换成我们的结果过滤器
[CustomResult]
public ActionResult GetText()
{
ViewBag.Message = "执行方法";
return View();
}
好了我们运行程序,并且在浏览器里直接请求我们这个方法,我们看看效果

OnResultExecuted方法
OnResultExecuted方法在动作方法执行后调用,传递给OnResultExecuted方法的参数是ResultExecutedContext对象。它的属性如下:
| 名称 | 类型 | 说明 |
|---|---|---|
| Canceled | bool | 获取或设置一个值,该值指示此ResultExecutedContext 对象已被取消。 |
| Exception | Exception | 获取或设置在操作方法的执行过程中发生的异常(如果有)。 |
| ExceptionHandled | bool | 获取或设置一个值,该值指示是否处理异常。 |
| Result | ActionResult | 获取或设置由操作方法返回的结果。 |
执行OnActionExecuted方法
同样的我们可以像之前动作过滤器一样可以通过获取动作方法结果返回的时间。我们修改 CustomResultAttribute.cs 过滤器代码如下:
public class CustomResultAttribute : FilterAttribute, IResultFilter
{
private Stopwatch timer;
public void OnResultExecuting(ResultExecutingContext filterContext)
{
timer = Stopwatch.StartNew();
}
public void OnResultExecuted(ResultExecutedContext filterContext)
{
timer.Stop();
filterContext.HttpContext.Response.Write($"<div>方法结果结束时间为:{timer.Elapsed.TotalSeconds:F6}</div>");
}
}
我们在方法启动之前启动了一个计时器并在结果返回后停止了它,并且将这个时间间隔输出到我们的页面上。

结合动作过滤器和结果过滤器
MVC里自带了一个过滤器叫做ActionFilter这个过滤器就是创建动作过滤器和结合过滤器,为了演示这个过滤器的使用我们创建一个名为ActionProcessFilterAttribute的新过滤器,我们结合两种过滤器,并把每个过滤产生的步骤输出到页面上。过滤器代码如下:
public class ActionProcessFilterAttribute : FilterAttribute, IActionFilter, IResultFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("<div>方法调用前</div>");
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("<div>方法调用后</div>");
}
public void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("<div>结果返回前</div>");
}
public void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("<div>结果返回后</div>");
}
}
我们来看看结果

笨鸟先飞之ASP.NET MVC系列之过滤器(05结果过滤器)的更多相关文章
- 笨鸟先飞之ASP.NET MVC系列之过滤器(01过滤器简介)
过滤器 什么是过滤器? 过滤器(Filter) 主要的作用大致可以理解为把我们的附加逻辑注入到MVC框架的请求处理. 在ASP.NET MVC的请求处理中一种有19个管道事件分别是 BeginRequ ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(02授权过滤器)
授权过滤器 概念介绍 在之前的文章中我们已经带大家简单的了解了下过滤器,本次我们开始介绍授权过滤器. 我们之前提到过授权过滤器在认证过滤器之后,其他过滤器和方法被调用之前运行,而授权过滤器和它名字的含 ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器过滤器)
概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以 ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器)
概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以 ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(03动作过滤器过滤器)
概念介绍 动作过滤器应该是我们平常工作中需要用到最多的过滤器了,动作过滤器,主要在我们的动作方法执行前后执行. 如果我们需要创建动作过滤器需要实现IActionFilter接口. 我们看到该接口里有两 ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(06异常过滤器)
概念介绍 异常过滤器主要在我们方法中出现异常的时候触发,一般我们用 异常过滤器 记录日志,或者在产生异常时做友好的处理 如果我们需要创建异常过滤器需要实现IExceptionFilter接口. nam ...
- ASP.NET MVC 系列随笔汇总[未完待续……]
ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈Google Chrome浏览器(操作篇)(下)
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
随机推荐
- 事后诸葛亮分析(Beta版本)
全组讨论的照片 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决代码分析.统计.管理等问题,定义的很清楚,有清晰的描述. 是否有充足的时间来做计划? ...
- 201521123063 《Java程序设计》 第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 这次就不弄思维导图了,就直接总结了 遍历Map的方法 (1)使用键值对for循环 Map<String, ...
- 201521123042 《java程序设计》 第八周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. ①泛型定义:泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展, ...
- 201521123099 《Java程序设计》第4周学习总结
1. 本周学习总结 2. 书面作业 注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 面向对象设计(大作业1,非常重要) 2.1 将在网上商城购物或 ...
- 201521123093 java 第十四周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. MySQL中的库操作和表操作 库操作: 显示所有数据库: show databases; 创建数据库: crea ...
- 201521123022 《Java程序设计》 第九周学习总结
1.本章学习总结 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 Q1.1 截图你的提交结果(出现学号) Q1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何 ...
- JS中的DOM对象及JS对document对像的操作
DOM对象 windows:属性:opener(打开者) 方法:open().close(),setTimeout().setInterval()... location:属性:href 方法:rel ...
- while循环_do_while循环_switch
swith语法: switch(值) { case 值1: 语句 break; case 值2: 语句 break; case 值3: 语句 break; default: break; } 1.值与 ...
- Spring REST API + OAuth2 + AngularJS
http://www.baeldung.com/rest-api-spring-oauth2-angularjs 作者:Eugen Paraschiv 译者:http://oopsguy.com 1. ...
- Spring第二篇【Core模块之快速入门、bean创建细节、创建对象】
前言 上篇Spring博文主要引出了为啥我们需要使用Spring框架,以及大致了解了Spring是分为六大模块的-.本博文主要讲解Spring的core模块! 搭建配置环境 引入jar包 本博文主要是 ...