笨鸟先飞之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浏览器(操作 ...
随机推荐
- 201521123068《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 点击查看->高清脑图 1.2 使用常规方法总结其他上课内容. 答:学习继承与多态的知识,了解它们之间的关系:super.ext ...
- 201521123109《java程序设计》第三周学习总结
1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...
- 201521123112《Java程序设计》第2周学习总结
1.本周学习总结 本周在课堂面授课粗略讲了<Java学习笔记>中的第三章,其内容大部分都与上学期学习的数据结构差不多,所以只是粗略的复习了一下就带过,然后通过将PTA上的实验便于我们本周的 ...
- Java课程设计--GUI密码生成器201521123033
1.团队课程设计题目 基于GUI的密码生成器 团队博客链接 2.个人负责模块 (1)界面设计 (2)部分错误输入的提示 (3)一键复制密码功能的实现 3.个人代码的提交记录截图 4.个人代码展示以及代 ...
- SVN不出现绿色对勾的情况
就目前而言,我出现了两种情况. Num1:电脑云盘可能不兼容,导致无法出现svn提示小icon:----->删除云盘重新启动. Num2:被设置覆盖.----->鼠标右键-->Tor ...
- sqlserver2012安装过程
第三次安装sqlserver2012 记录下安装过程,受益的人多多指教. 一.以我的系统64位为例,所以先准备安装包,从官网 https://www.microsoft.com/zh-CN/downl ...
- 关于学习Python的一些心得
1.关注函数参数的类型,如列表,字符串,int,而不是关注函数的功能 2.导入模块numpy,dir(numpy) 查看所有属性 3.''.join(列表) 将列表拆成字符串
- Mybatis学习(二)常用对象SqlSessionFactory和SqlSession
1.SqlSessionFactory SqlSeesionFactory对象是MyBatis的关键对象,它是一个数据库映射关系经过编译后的内存镜像. SqlSeesionFactory对象的实例可以 ...
- Cnblogs关于嵌入js和css的一些黑科技
#pong .spoiler{cursor:none;display:inline-block;line-height:1.5;}sup{cursor:help;color:#3BA03B;} Pon ...
- 两句话动态修改table数据并提交到后台
//为所有的input 添加click事件,我将对象的id放入到name属性中,行数放入到alt属性中 $("input").click(function(obj){ //获得当前 ...