笨鸟先飞之ASP.NET MVC系列之过滤器(03动作过滤器过滤器)
2017-10-16 09:06
519 查看
概念介绍
动作过滤器应该是我们平常工作中需要用到最多的过滤器了,动作过滤器,主要在我们的动作方法执行前后执行。如果我们需要创建动作过滤器需要实现IActionFilter接口。
namespace System.Web.Mvc { // // 摘要: // 定义操作筛选器中使用的方法。 public interface IActionFilter { // // 摘要: // 在执行操作方法后调用。 // // 参数: // filterContext: // 筛选器上下文。 void OnActionExecuted(ActionExecutedContext filterContext); // // 摘要: // 在执行操作方法之前调用。 // // 参数: // filterContext: // 筛选器上下文。 void OnActionExecuting(ActionExecutingContext filterContext); } }
我们看到该接口里有两个方法OnActionExecuting和OnActionExecuted,前者在动作方法执行前调用,后者在动作方法执行后调用。
OnActionExecuting方法
我们已经知道了OnActionExecuting方法实在动作方法调用之前被,调用的那么我们就可以利用这个方法来检测请求,并且可以在这里修改请求,取消请求,在OnActionExecuting方法中传递的参数是一个ActionExecutingContext对象,它继承于ControllerContext类,它的属性如下:名称 | 类型 | 说明 |
---|---|---|
ActionDescriptor | ActionDescriptor | 获取或设置操作描述符。 |
ActionParameters | IDictionary | 获取或设置操作方法参数。 |
Result | ActionResult | 获取或设置由操作方法返回的结果。 |
执行OnActionExecuting方法
下面我将演示OnActionExecuting方法,首先我们还是在之前的Filter文件夹下添加一个名为 CustomActionAttribute.cs 的过滤器类,我们继承 FilterAttribute 类和 IActionFilter 接口,为了方便演示,我们简单处理,判断请求类型,如果是GET请求那么我们让其抛出404错误。这是我们在
CustomActionAttribute.cs文件中编写的代码
public class CustomActionAttribute : FilterAttribute, IActionFilter { public void OnActionExecuting(ActionExecutingContext filterContext) { if (string.Equals(filterContext.HttpContext.Request.HttpMethod, "get", StringComparison.CurrentCultureIgnoreCase)) { filterContext.Result = new HttpNotFoundResult(); } } public void OnActionExecuted(ActionExecutedContext filterContext) { } }
因为创建动作过滤器需要实现IActionFilter接口中的两个方法,如果不需要实现逻辑我们可以先让其空着,因为MVC框架对动作过滤器中的两个方法都会调用。
接着我们在Home控制器里添加一个方法方法会直接在页面输出“执行方法”这几个字,接着我们在方法上应用,我们的动作过滤器
[CustomAction] public ActionResult GetText() { ViewBag.Message = "执行方法"; return View(); }
好了我们允许程序,并且在浏览器里直接请求我们这个方法,我们看看效果
OnActionExecuted方法
OnActionExecuted方法在动作方法执行后调用,传递给OnActionExecuted方法的参数是ActionExecutedContext对象。这个类相比我们之前的ActionExecutingContext对象而言多了些属性,它的属性如下:名称 | 类型 | 说明 |
---|---|---|
ActionDescriptor | ActionDescriptor | 获取或设置操作描述符。 |
Canceled | bool | 获取或设置一个值,该值指示此ActionExecutedContext 对象已被取消。 |
Exception | Exception | 获取或设置在操作方法的执行过程中发生的异常(如果有)。 |
ExceptionHandled | bool | 获取或设置一个值,该值指示是否处理异常。 |
Result | ActionResult | 获取或设置由操作方法返回的结果。 |
执行OnActionExecuted方法
我们可以通过OnActionExecuted方法来执行一些跨越动作方法的任务,比如我们可以用它来获取动作方法执行的时间。我们修改 CustomActionAttribute.cs 过滤器代码如下:public class CustomActionAttribute : FilterAttribute, IActionFilter { private Stopwatch timer; public void OnActionExecuting(ActionExecutingContext filterContext) { timer = Stopwatch.StartNew(); } public void OnActionExecuted(ActionExecutedContext filterContext) { timer.Stop(); if (filterContext.Exception == null) { filterContext.HttpContext.Response.Write($"<div>方法执行时间:{timer.Elapsed.TotalSeconds:F6}s</div>"); } } }
我们在方法启动之前启动了一个计时器并在方法执行后停止了它,并且将这个时间间隔输出到我们的页面上。
相关文章推荐
- 笨鸟先飞之ASP.NET MVC系列之过滤器(02授权过滤器)
- 笨鸟先飞之ASP.NET MVC系列之过滤器(06异常过滤器)
- 笨鸟先飞之ASP.NET MVC系列之过滤器(05结果过滤器)
- 笨鸟先飞之ASP.NET MVC系列之过滤器(01过滤器简介)
- 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器)
- ASP.NET MVC动作过滤器
- ASP.NET MVC动作过滤器
- ASP.NET MVC动作过滤器
- 学习ASP.NET MVC系列 - 还有比这更简炼的吗?把复杂的事情变简单了,贡献啊!
- ASP.NET MVC 入门系列教程
- ASP.NET MVC的过滤器
- 详解Asp.Net MVC――控制器与动作(Controller And Action)
- 在ASP.NET MVC中使用Knockout实践03,巧用data参数
- 转发:ASP.NET MVC 4与Windows Azure 表、Blobs、队列的教程系列和示例应用程序
- 使用StructureMap扩展ASP.NET MVC三层结构框架系列文章总结篇(附源码下载)
- 我要学ASP.NET MVC 3.0(十八): MVC 3.0 实例系列之表格中合并排序、分页和筛选
- ASP.NET MVC 2博客系列之一:强类型HTML辅助方法
- asp.net mvc5 身份验证过滤器
- ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers
- ASP.NET MVC 过滤器(一)