本系列目录:ASP.NET MVC4入门到精通系列目录汇总

在ASP.NET MVC中有四种过滤器类型

Action

1、在ASP.NET MVC项目中,新建文件夹Filter,然后新建类MyCustormFilter,继承自ActionFilterAttribute类,我们来看下ActionFilterAttribute类有如下四个方法,从命名我应该就可以看出他们的执行时机。

  public class MyCustormFilter:ActionFilterAttribute{public override void OnActionExecuting(ActionExecutingContext filterContext){filterContext.HttpContext.Response.Write("Action执行前");base.OnActionExecuting(filterContext);}public override void OnActionExecuted(ActionExecutedContext filterContext){filterContext.HttpContext.Response.Write("Action执行后");base.OnActionExecuted(filterContext);}}

2、对于过滤器,我们可以把它们加在三个地方,一个是控制器上面(控制器下面的所有Action),一个是Action上面(指定标识的Action),另一个就是全局位置(所有控制器中的Action)。这里我只演示在Action上面加

       [MyCustormFilter]        public ActionResult Index()        {            return View();        }       public ActionResult Index1()       {           return View();       }    

3、build然后运行

Result

1、新建类TestResultFilter,继承ActionFilterAttribute

  public class TestResultFilter:ActionFilterAttribute{/// <summary>/// 加载 "视图" 前执行/// </summary>/// <param name="filterContext"></param>public override void OnResultExecuting(System.Web.Mvc.ResultExecutingContext filterContext){filterContext.HttpContext.Response.Write("加载视图前执行 OnResultExecuting <br/>");base.OnResultExecuting(filterContext);}/// <summary>/// 加载"视图" 后执行/// </summary>/// <param name="filterContext"></param>public override void OnResultExecuted(System.Web.Mvc.ResultExecutedContext filterContext){filterContext.HttpContext.Response.Write("加载视图后执行 OnResultExecuted <br/>");base.OnResultExecuted(filterContext);}}

2、这里我把TestResultFilter过滤器加在控制器上面

  [TestResultFilter]public class FilterTestController : Controller{[MyCustormFilter]public ActionResult Index(){return View();}public ActionResult Index1(){return View();}}

3、运行看下结果

注意:Result过滤器,无论Action的返回类型为什么(甚至void)都将执行。

RouteData中保存了当前请求匹配的路由信息和路由对象

修改MyCustormFilter.cs

 public override void OnActionExecuting(ActionExecutingContext filterContext){//1.获取获取请求的类名和方法名string strController = filterContext.RouteData.Values["controller"].ToString();string strAction = filterContext.RouteData.Values["action"].ToString();//2.另一种方式 获取请求的类名和方法名string strAction2 = filterContext.ActionDescriptor.ActionName;string strController2 = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;filterContext.HttpContext.Response.Write("Action执行前</br>");filterContext.HttpContext.Response.Write("控制器:" + strController + "</br>");filterContext.HttpContext.Response.Write("控制器:" + strController2+"</br>");filterContext.HttpContext.Response.Write("Action:" + strAction + "</br>");filterContext.HttpContext.Response.Write("Action:" + strAction2 + "</br>");base.OnActionExecuting(filterContext);}

AuthorizeAttribute

1、  新建TestAuthorizeAttribute

    /// <summary>/// 授权过滤器 --在Action过滤器前执行/// </summary>public class TestAuthorizeAttribute:AuthorizeAttribute{public override void OnAuthorization(AuthorizationContext filterContext){filterContext.HttpContext.Response.Write("<br/>OnAuthorization<br/>");//注释掉父类方法,因为父类里的 OnAuthorization 方法会调用asp.net的授权验证机制!//base.OnAuthorization(filterContext);}
}

2、在控制器FilterTest中的Index上添加TestAuthorize标记

       [MyCustormFilter][TestAuthorize]public ActionResult Index(){return View();}

运行看下结果:

Exception

1、新建TestHandleError.cs

    /// <summary>/// 异常处理 过滤器/// </summary>public class TestHandleError : HandleErrorAttribute{public override void OnException(ExceptionContext filterContext){//1.获取异常对象Exception ex = filterContext.Exception;//2.记录异常日志//3.重定向友好页面filterContext.Result = new RedirectResult("~/error.html");//4.标记异常已经处理完毕filterContext.ExceptionHandled = true;base.OnException(filterContext);}}

2、在Action上面加TestHandleError

  [TestHandleError]public ActionResult GetErr(){int a = 0;int b = 1 / a;return View();}

注意:通常这样的异常处理我们是放在全局过滤器上面的。

   public class FilterConfig{public static void RegisterGlobalFilters(GlobalFilterCollection filters){//filters.Add(new HandleErrorAttribute());//添加全局过滤器filters.Add(new TestHandleError());}}

16、ASP.NET MVC入门到精通——MVC过滤器相关推荐

  1. 1、ASP.NET MVC入门到精通——新语法

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...

  2. ASP.NET MVC入门到精通——Spring.net-业务层仓储

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...

  3. 14、ASP.NET MVC入门到精通——Ajax

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 Unobtrusive Ajax使用方式(非入侵式) 非入侵式,通俗来讲:就是将嵌入在Html中的JavaScript全部取出来,放在单独的 ...

  4. asp.net从入门到精通配套课件_MATLAB从入门到算法实践第八期本周六直播

    推荐Matlab算法经典课程,此课程已经经过7次升级和打磨,累计超过3000多人学习,想从零基础入门和想提高Matlab编程水平的同学推荐加入学习. 讲师介绍 董辰辉 Matlab 畅销书主编.上市公 ...

  5. Spring MVC入门:Spring MVC是什么?

    Spring MVC是什么? Spring MVC 是一个模型 - 视图 - 控制器(MVC)的Web框架建立在中央前端控制器servlet(DispatcherServlet),它负责发送每个请求到 ...

  6. lt;ASP.NET4 从入门到精通gt;学习笔记3

    第三部分,状态管理与缓存 何为状态管理.起始对于web而言.经过前面章节的解说.已经理解,对于web程序,就是一个无状态的程序.每次的请求与每次的响应,两者之间本身就是独立存在的,这一点对于早期的静态 ...

  7. Asp组件中级入门与精通系列之三

    Session相比较就简单多了 看 打开vb6,新建Activex Dll工程.工程名修改为fCom,类名修改为fZ3 引用"Microsoft Active Server Pages Ob ...

  8. Asp组件中级入门与精通系列之五

    我们学习来看一下Response对象.其实我们前面的教程中一直都在使用这个对象的Write方法. 这里我们用Response对象设置cookie. ? 打开vb6,新建Activex Dll工程.工程 ...

  9. Asp组件初级入门与精通系列之六

    错误处理 如果页面出错,而没有对错误的处理,那么页面会显示一个用户可能看不懂的错误. 在asp脚本中可以使用 On Error Resume Next -- if Err.Number<> ...

最新文章

  1. ipad连接电脑_Ipad已经停用需要连接iTunes的一种解决方案,
  2. 【机器学习】什么是机器学习?(下)
  3. 转:c# 根据当前时间获取,本周,本月,本季度,月初,月末,各个时间段
  4. 利用有序节点来实现分布式锁
  5. 第69课 胡萝卜与骨头
  6. 02.vs2015编译qt动态库
  7. ORA-00906 missing left parenthesis括号
  8. (寒假集训)Mooo Moo (完全背包)
  9. matlab costas环,MATLAB写COSTAS环的问题。
  10. CSS:布局——左右两个DIV,左侧宽度固定,右侧占满剩余部分
  11. ssm社区线上超市购物系统毕业设计-附源码211704
  12. Music-Downloader:功能强大的音乐下载器
  13. python设计报告的前言怎么写_前  言_Python语言程序设计_红黑联盟读书频道
  14. FPGA循环点亮流水灯
  15. 网站优化的常用SEO方法
  16. vivo手机怎么添加日程提醒?vivo手机添加日程方法
  17. Asterisk[1]
  18. python代码举例说明生日悖论
  19. es6数组去重(连重复的对象也可以去掉)
  20. 软件测试工程师自我介绍范文_高级软件测试工程师自我介绍

热门文章

  1. 【React自制全家桶】一、Webstrom+React+Ant Design+echarts搭建react项目
  2. 安装ubuntu时将boot目录单独挂载的意义
  3. 《一个程序员的奋斗史》正式上架~
  4. 1026 Modular multiplication of polynomials
  5. 第五讲 类的封装和类的继承
  6. 计算氦原子的基态能级
  7. 机器学习中的评价指标--1[F,P,R]
  8. 序列化与反序列化_序列化和反序列化JAVA成长之路
  9. python pdf报告_Python实现html转换为pdf报告(生成pdf报告)功能示例
  10. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-目录