简介

mvc的过滤器类型有四种,分别如下:

过滤器类型 接口 默认实现 描述
Action IActionFilter ActionFilterAttribute 在动作方法之前及之后运行
Result IResultFilter ActionFilterAttribute 在动作结果被执行之前和之后运行
AuthorizationFilter IAuthorizationFilter AuthorizeAttribute 首先运行,在任何其它过滤器或动作方法之前
Exception IExceptionFilter HandleErrorAttribute 只在另一个过滤器、动作方法、动作结果弹出异常时运行

Demo 下载

链接:https://pan.baidu.com/s/1q6Cxw0-Ea1lFbu3_cBl8UA
提取码:59vn

Action、Result

新建一个MyCustormFilter类, 该类继承 ActionFilterAttribute,可以重写父类的 OnActionExecuting、OnActionExecuted、OnResultExecuting、OnResultExecuted等方法,具体含义如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;namespace Demo.App_Start
{public class MyCustormFilter : ActionFilterAttribute{/// <summary>/// Action执行前/// </summary>/// <param name="filterContext"></param>public override void OnActionExecuting(ActionExecutingContext filterContext){filterContext.HttpContext.Response.Write("Action执行前<br />");base.OnActionExecuting(filterContext);}/// <summary>/// Action执行后/// </summary>/// <param name="filterContext"></param>public override void OnActionExecuted(ActionExecutedContext filterContext){filterContext.HttpContext.Response.Write("Action执行后<br />");base.OnActionExecuted(filterContext);}/// <summary>/// 加载 "视图" 前执行/// </summary>/// <param name="filterContext"></param>public override void OnResultExecuting(ResultExecutingContext filterContext){filterContext.HttpContext.Response.Write("加载视图前执行 OnResultExecuting <br/>");base.OnResultExecuting(filterContext);}/// <summary>/// 加载"视图" 后执行/// </summary>/// <param name="filterContext"></param>public override void OnResultExecuted(ResultExecutedContext filterContext){filterContext.HttpContext.Response.Write("加载视图后执行 OnResultExecuted <br/>");base.OnResultExecuted(filterContext);}}
}

Index标记MyCustormFilter特性

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

AuthorizeAttribute

新建一个TestAuthorizeAttribute类, 该类继承 AuthorizeAttribute,可以重写父类的 OnAuthorization等方法,具体含义如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;namespace Demo.App_Start
{/// <summary>/// 授权过滤器 --在Action过滤器前执行/// </summary>public class TestAuthorizeAttribute: AuthorizeAttribute{/// <summary>/// 当进程请求授权时调用。/// </summary>/// <param name="filterContext"></param>public override void OnAuthorization(AuthorizationContext filterContext){filterContext.HttpContext.Response.Write("授权过滤器 --在Action过滤器前执行<br/>");}}
}

给Index加上TestAuthorizeAttribute特性

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

运行结果如下图

Exception

新建一个TestHandleError类, 该类继承 HandleErrorAttribute,可以重写父类的 OnException等方法,具体含义如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;namespace Demo.App_Start
{/// <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);}}
}

在Action上面加TestHandleError

通常这样的异常处理我们是放在全局过滤器里面

例如:

using Demo.App_Start;
using System.Web;
using System.Web.Mvc;namespace Demo
{public class FilterConfig{public static void RegisterGlobalFilters(GlobalFilterCollection filters){filters.Add(new HandleErrorAttribute());//添加全局过滤器filters.Add(new TestHandleError());}}
}

ASP.NET MVC中四种过滤器类型介绍相关推荐

  1. [转载]Asp.net MVC中Controller返回值类型

    Asp.net MVC中Controller返回值类型 在mvc中所有的controller类都必须使用"Controller"后缀来命名 并且对Action也有一定的要求: 必须 ...

  2. ASP.NET MVC中常用的ActionResult类型

    一.定义 MVC中ActionResult是Action的返回结果.ActionResult 有多个派生类,每个子类功能均不同,并不是所有的子类都需要返回视图View,有些直接返回流,有些返回字符串等 ...

  3. Smart Form中四种窗口类型的区别

    smart form中4中类型的窗口: Main Window:主窗口 主窗口一般用于数据的列表显示,用于LOOP循环显示:当然也可显示非列表内容. 一个Form中只能包含一个主窗口. 主窗口可分页输 ...

  4. 【原创】MT4中四种交易类型详解

    1.Buy 1)      Buy Limit Ø          指以低于现价的价位限价买入,是交易人认为价位跌到某个点位,买入比较安全了. Ø          买入限价,在当前价格下方挂买单( ...

  5. Asp.net MVC 中Controller返回值类型ActionResult

    目录 1.返回ViewResult视图结果,将视图呈现给网页 2. 返回PartialViewResult部分视图结果,主要用于返回部分视图内容,在View/Shared目录下创建ViewUserCo ...

  6. Java中四种线程池介绍

    个人资源与分享网站:http://xiaocaoshare.com/ Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而是一个执行线程的工具.真正的线 ...

  7. ASP.NET MVC中实现多个按钮提交的几种方法

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

  8. 四种依恋类型_“我值得被爱吗?”| 如何在亲密关系中培养安全型依恋

    缺爱的人最后会和什么样的人在一起?文 | 徐非儿(简单心理认证·实习咨询师) 如果我们尝试给"缺爱"下一个笼统的定义,那可能是:在成长过程中缺乏被关爱的经历,例如总是遭到主要养育者 ...

  9. 学习笔记 | c++中四种类型cast(强制)转换

    c++中四种cast转换 C++四种强制转换方式,应用场景,细节 1.const_cast 用于将const变量转为非const. 用来修饰类型的const或volatile属性.除了去掉const或 ...

最新文章

  1. Linux Web服务器网站故障分析常用的命令
  2. ubuntu10.10+android 搭建Opencv
  3. CodeForces - 817D Imbalanced Array(单调栈)
  4. 安卓logcat工具apk_backdoorapk 安卓APK后门捆绑脚本
  5. spring的钩子_spring提供的钩子,你知道哪些
  6. java并发包作者lee_Java的一些并发包
  7. Oracle遇到的一些坑
  8. 02277微型计算机原理及应用,微型计算机原理及应用(课程代码:02277).doc
  9. 全国各地市统计年鉴汇总2021
  10. Word文档转换:如何使用Aspose.words在Java中将Word和图像转换为PDF
  11. java审批工作流,值得一读!
  12. Fragment already added 解决方式
  13. 利用python和Sen2cor对Sentinel2进行批量大气校正
  14. 骄傲狮子座的感情世界(图
  15. 自学Java的心路历程
  16. 计算机(了解)\注释\变量\数据类型\格式化输出\debug
  17. yarn报错Tarball is not in network and can not be located in cache
  18. vue单独设置页面背景
  19. 单节点Rancher离线安装的关键一步
  20. spoolsv.exe占用cpu 100%的解决方法

热门文章

  1. 跟着 Cell 学作图 | 4.小提琴图
  2. iMovie使用技巧
  3. twemproxy(1):twemproxy安装
  4. 亚马逊和ebay,你们现在都是用什么收款平台啊?
  5. 投资理财web后端系统_JSP+Servlet 实现:理财产品信息管理系统
  6. [大伽交流] 不见不散!8月23日k8s第7期直播:《K8S存储原理剖析与实践》
  7. 自动化运维工具Ansible,保姆级讲解
  8. 未来计算机会朝什么方向发展,你觉得未来计算机将会往什么方向发展呢?
  9. JDK和cglib动态代理原理详解
  10. 四季靓汤—瘦肉鸡骨草煲蜜枣汤