在ASP.NET MVC中有个重要特性就是过滤器,使得我们在MVC程序开发中更好的控制浏览器请求的URL,不是每个请求都有响应内容,只有特定得用户才有。园子里关于过滤器的资料也有很多,这篇文章主要是记录自己的学习。

过滤器类型

类型 接口 默认实现 执行时间 描述
 Action  IActionFilter ActionFilterAttribute  用于进入行为之前或之后的处理  方法过滤器
 Result  IResultFilter ActionFilterAttribute 用于返回结果的之前或之后的处理  结果过滤器
 Exception  IExceptionFilter

HandleErrorAttribute

用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常  异常过滤器
 Authentication  IAuthorizationFilter

AuthorizeAttribute

此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法  授权过滤器

1. Action

  • 在ASP.NET MVC项目中新建文件夹Filter,然后再在文件夹下新建类MyActionFilter,在类中添加命名空间using System.Web.Mvc,再继承自ActionFilterAttribute抽象类,我们按F12我们可以看到抽象类有四个方法,从方法的命名我们不难发现他们的执行顺序。
    public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter{protected ActionFilterAttribute();public virtual void OnActionExecuted(ActionExecutedContext filterContext);public virtual void OnActionExecuting(ActionExecutingContext filterContext);public virtual void OnResultExecuted(ResultExecutedContext filterContext);public virtual void OnResultExecuting(ResultExecutingContext filterContext);}

MyActionFilter.cs

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

  • 过滤器可以加在三个地方,第一是控制器上面(可限制控制器下面所有的Action),第二是Action上面(限制指定的Action),第三是全局的过滤器(限制所有的Action)。

  1. 控制器上面  

2.  Action上面

3.   全局过滤器

在ASP.NET MVC项目中的App_Start下新建类FilterConfig,添加静态方法RegisterGlobalFilters。

在Global中注册RegisterGlobalFilters方法。

  • 运行结果

2. Result

  • Result作用于用于返回视图的之前或之后的处理。

代码如下:

        //加载试图后执行public override void OnResultExecuted(ResultExecutedContext filterContext){filterContext.HttpContext.Response.Write("加载视图后执行OnResultExecuted<br/>");base.OnResultExecuted(filterContext);}//加载试图前执行public override void OnResultExecuting(ResultExecutingContext filterContext){filterContext.HttpContext.Response.Write("加载视图前执行OnResultExecuting<br/>");base.OnResultExecuting(filterContext);}

结果如下:

3. Exception

  • 异常过滤器最好设置成全局过滤器,记录异常日志。

代码如下:

        /// <summary>/// 异常处理过滤器,最好设置成全局过滤器/// </summary>/// <param name="filterContext"></param>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);}

4. Authentication

  • 授权过滤器作用范围在Action之前
        public override void OnAuthorization(AuthorizationContext filterContext){filterContext.HttpContext.Response.Write("授权过滤器");base.OnAuthorization(filterContext);}

5. 过滤器的执行顺序

转载于:https://www.cnblogs.com/liujie2272/p/5363082.html

ASP.NET MVC过滤器相关推荐

  1. ASP.NET MVC 过滤器(一)

    ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢 ...

  2. asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码

    asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码 参考文章: (1)asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码 (2)https://www.cnblogs.co ...

  3. ASP.NET MVC 过滤器(三)

    ASP.NET MVC 过滤器(三) 前言 本篇解说行为过滤器的运行过程,过滤器实现.使用方式有AOP的意思.能够通过学习了解过滤器在框架中的运行过程从而获得一些AOP方面的知识(在顺序运行的过程中, ...

  4. ASP.NET MVC 过滤器(五)

    ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了解说,假设在控制器行为的运行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大 ...

  5. ASP.NET MVC过滤器(一)

    MVC过滤器是加在 Controller 或 Action 上的一种 Attribute,通过过滤器,MVC 网站在处理用户请求时,可以处理一些附加的操作,如:用户权限验证.系统日志.异常处理.缓存等 ...

  6. ASP.NET MVC过滤器的使用

    一.过滤器的理解 1.ASP.NET MVC中继承自FilterAttributeAttribute的类统称为过滤器 2.Authorize HandlerError OutputCache这些类都直 ...

  7. ASP .NET MVC过滤器

    MVC过滤器一共分为四个: ActionFilter:方法过滤器 ResultFilter:结果过滤器 AuthorizationFilter:授权过滤器 ExceptionFilter:异常处理过滤 ...

  8. ASP.NET MVC过滤器自定义Authorize实现身份验证

    最近在做一个.NET MVC框架的后台项目,涉及到5个权限,而控制器下的方法有些只能高权限用户使用,低权限用户不能访问,一开始是在方法里面写判断,但是功能方法多了以后,发现代码重复的很严重,不符合面向 ...

  9. asp.net mvc 过滤器

    https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters#ordering 1. 对于应用在 Action 上的多个行为 ...

  10. ASP.NET MVC过滤器

    转载:http://www.cnblogs.com/hbai/articles/4871327.html 转载于:https://www.cnblogs.com/lwjlss/p/6197644.ht ...

最新文章

  1. WinCE串口蓝牙的实现 .
  2. python常用内置函数汇总_太全了!Python3常用内置函数总结
  3. 工具的特性_16 个好用的 Code Review 工具
  4. 信息学奥赛C++语言:梯形面积
  5. 数字图像处理--微分算子为什么也是空间滤波器
  6. Audio Session Programming Guide
  7. 程序员都应该了解的一种数据格式之 JSON
  8. 怎么用vc采集ni卡数据_「解决方案」三维激光扫描多数据混合作业,助力“地籍调查”...
  9. shiro ajax请求拦截器,shiro 拦截器实现session过期拦截ajax请求的处理
  10. http协议(九)响应首部字段
  11. Excel 条件格式实现甘特图
  12. 虚拟IP人物,同时空出现——思念党的福音
  13. 自动提取论文公式方法
  14. 计算机c盘应该装什么区别,电脑的c盘和d盘有什么区别吗
  15. 《富爸爸,穷爸爸》思维导图
  16. Godot游戏开发实践之一:使用High Level Multiplayer API制作多人游戏(上)
  17. Don't Call Yourself A Programmer, And Other Career
  18. 追风去,不如造风来——致敬蚂蚁区块链创新大赛中的参与者们
  19. 20.JavaScript6
  20. node 介绍、安装、升级(node npm)

热门文章

  1. python爬虫股票数据分析判断股票好坏_教你用Python爬虫股票评论,简单分析股民用户情绪...
  2. 火狐浏览器驱动_火狐浏览器开始支持比WebGL更简单的绘图API WebGPU
  3. ie的window.open 未指明的错误_火灾无情预防先行 错误操作致火灾加重
  4. mysql中cost对比测试
  5. JavaWeb 基础系列篇
  6. MySQL — 创建表,插入数据,更新数据,删除数据
  7. spring awre的理解
  8. 对进程、线程和应用程序域的理解
  9. 51nod 1105 第K大的数 【双重二分/二分套二分/两数组任意乘积后第K大数】
  10. MTV模型—urls和view