过滤器(Filter)

  AOP (面向切面编程)是一种架构思想,用于把公共的逻辑放到一个单独的地方,这样就不用每个地方都写重复的代码了。 比如程序中发生异常,都 不用每个地方都 try...catch... 只要在(Global 的 的 Application_Error )中 统一进行 异常处理个 。

四种 Filter:

在 在 ASP.Net MVC 个 中提供了四个 Filter (过滤器) 接口种 实现了这种 AOP 机制 :
IAuthorizationFilter 、IActionFilter 、IResultFilter 、IExceptionFilter 。
1 )IAuthorizationFilter 一般用来检查当前用户是否有 Action 的执行权限 ,在个 每个 Action 被
执行前执行 OnAuthorization 方法 ;
2 )IActionFilter 也是在 每个 Action 被执行前执行 OnActionExecuting 方法 , 每个 Action 执行
完成后执行 OnActionExecuted 方法。和 和 IAuthorizationFilter 的区别是 IAuthorizationFilter 在
IActionFilter 之前执行 ,检查权限一般写到 IAuthorizationFilter 中 ;
3) )IResultFilter ,在 每个 ActionResult 的前后执行 IResultFilter 。用的很少, , 后面有一个应用。
4) )IExceptionFilter ,当 Action 执行发生未处理异常的时候执行 OnException 方法。 。在 在 ASP.net
MVC 中仍然可以使用 “Global 的 的 Application_Error ”,但是建议用 IExceptionFilter 。
定义的类可以在Global 中GlobalFilters.Filters.Add(new XXXFilter()); 的方式添加为全局的
过滤器'

实例:

定义的类可以在Global 中GlobalFilters.Filters.Add(new XXXFilter()); 的方式添加为全局的
过滤器。
2 、IAuthorizationFilter 案例 : 只有登录后才能访问除了 LoginController 之外的 Controller 。
1) ) 编写一个类 CheckAuthorFilter ,实现 IAuthorizationFilter 接口
2) ) 在 在 Global 中注册这个 Filter :GlobalFilters.Filters.Add(new CheckAuthorFilter());
3) ) CheckAuthorFilter 中实现 OnAuthorization 方法。filterContext.ActionDescriptor 可以获得
Action 的信息:filterContext.ActionDescriptor.ActionName 获得要执行的 Action 的名字;
filterContext.ActionDescriptor.ControllerDescriptor.ControllerName 为要执行的 Controller
的名字;filterContext.ActionDescriptor.ControllerDescriptor.ControllerType 为要执行的
Controller 的 的 Type ;filterContext.HttpContext 的 获得当前请求的 HttpContext ; 如果给
“ “ filterContext.Result ” 赋值 了, 那么 就不 会再执 行的 要 执行 的 Action , 而是 以
“ “ filterContext.Result ” 的 值 作 为 执 行 结 果 ( 注 意 如 果 是 执 行 的
filterContext.HttpContext.Response.Redirect() ,那么目标 Action 还会执行的)。
4) ) 则 检查当前用户是否登录,如果没有登录则 filterContext.Result = new ContentResult()
{ Content = " 没有权限" }; 或者 filterContext.Result = new RedirectResult("/Login/Index");
(最好不要 filterContext.HttpContext.Response.Redirect("/Login/Index"); )
5) ) A 用户有一些 Action 执行权限,B 用户有另外一些 Action 的执行权限;
3 、IActionFilter 案例: 日志记录,记录登录用户执行的 Action 的记录,方便跟踪责任。
4 、IExceptionFilter:记录未捕获异常

public class ExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
File.AppendAllText("d:/error.log", filterContext.Exception.ToString());
filterContext.ExceptionHandled = true;// 如果有其他的 IExceptionFilter  不再执行
filterContext.Result = new ContentResult() { Content= "error" };
}
} GlobalFilters.Filters.Add(new ExceptionFilter());//然后
 

 总结好处:一次编写,其他地方默认就执行了。 可以添加多个同一个类型的全局 Filter ,
按照添加的顺序执行。
非全局 Filter :自 只要让实现类继承自 FilterAttribute 类,然后该实现哪个 Filter 接口就
到 实现哪个(四个都支持)。不添加到 GlobalFilters 中,而是义 把这个自定义 Attribute 添加到
Controller 类上这样就只有这个 Controller 中操作会用到这个 Filter 。如果添加到 Action 方法
上,则只有这个 Action 执行的时候才会用到这个 Filter

转载于:https://www.cnblogs.com/lyfingchow/p/6575149.html

MVC基础知识2——过滤器的使用(Filter)相关推荐

  1. Spring MVC基础知识整理➣国际化和异常处理

    概述 Spring框架为WEB项目提供了国际化以及异常处理机制.所谓的国际化也就是不同国籍,显示不同国籍的语言与符号.异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制. ...

  2. Spring IOC和MVC基础知识

    (1)SpringBoot分析 – Spring IOC原理解析 IOC,控制反转 Spring,避免那些可能致使代码变得繁杂.混乱的大量业务工具组合在一起,包括它的创建与销毁,等等,会帮助你进行管理 ...

  3. MVC基础知识-View

    public ActionResult Index() {ViewBag.Message = "Modify this template to jump-start your ASP.NET ...

  4. mvc试图 下拉框不重复_面试前不巩固一下基础知识、刷刷题吗?

    其实面试就像一场相亲,在你心动人的面前,肯定要展示自己最好的一面,无论是穿着还是言行举止.作为一个软件开发工程师,看过很多公司的面试题,也参与过很多公司的面试,也给不少人新人面过时不试,虽说我现在并没 ...

  5. thinkph 上花院 生多行mysql_PHP_ThinkPHP3.1基础知识快速入门,在当今众多的MVC框架中,ThinkPH - phpStudy...

    ThinkPHP3.1基础知识快速入门 在当今众多的MVC框架中,ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,其遵循Apache2开源协议发布,自从诞生以来一直秉承简 ...

  6. vue.js基础知识篇(4):过滤器、class与style的绑定2

    代码下载:网盘 欢迎私信 第一章:过滤器 过滤器是对数据进行处理并返回结果的函数. 1.语法 语法是使用管道符"|"进行连接.过滤器可以接收参数,跟在过滤器后面,带引号的参数被当做 ...

  7. Filter基础知识

    一.简介 作用:对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理的前后实现一些特殊的功能. 过滤器 API:Filter,FilterChain,FilterCo ...

  8. Spring集成基础知识

    本文是我们名为" EAI的Spring集成 "的学院课程的一部分. 在本课程中,向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们. 接下来,您将深 ...

  9. JAVA基础知识学习全覆盖

    文章目录 一.JAVA基础知识 1.一些基本概念 1.Stringbuffer 2.局部变量成员变量 3.反射机制 4.protect 5.pow(x,y) 6.final ,finally,fina ...

最新文章

  1. 每秒递减的方波扫频信号怎么生成_逆变器是怎么工作的?
  2. pytorch问题汇总
  3. 基于事件驱动架构构建微服务第1部分:应用程序特定的业务规则
  4. linux menuconfig usb,[Linux]make menuconfig里面的选项很重要
  5. Python小记--在特定位置修改CSV文件
  6. maven创建一个web项目(springmvc项目)
  7. Android下pm命令详解
  8. 【Cf #503 C】Sergey's problem(有趣的构造)
  9. 【图像配准】基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA、SATD算法...
  10. 用开关控制蜂鸣器_蜂鸣器驱动电路(实践出真理)
  11. struts2中,在使用 convention 插件的情况下,如何使用 “chain” 这个resu
  12. 整理15款实用javascript富文本编辑器
  13. 扩展有限元程序matlab,Abaqus中扩展有限元(XFEM)功能简介
  14. 化工自动化石油化工的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. 关键词搜索查找工具-批量关键词查找搜索工具-根据关键词自动采集素材软件
  16. 要重复多少次变成潜意识_量变到质变,首先要做的是不断重复
  17. matlab 相机焦距,matlab – 给定焦距和摄像机位置/旋转的正确透视图像
  18. 目前世界最穷的国家是哪一个?
  19. 应用排行榜第一名脸萌只是刹那的烟火
  20. Unable to negotiate with 192.168.XX.XX port XXXX: no matching key exchange method found.

热门文章

  1. HTML5 响应式网页设计之页面美化(二.媒体查询)
  2. JavaScript循环结构(1)
  3. JavaScript数据类型之比较运算符(8)
  4. Python入门--顺序结构,选择结构,对象的布尔值
  5. samba服务器_win10 更新导致无法连接samba服务器
  6. The CC version check failed下出现Failed CC version check. Bailing out! 解决方案
  7. [leetcode]146. LRU缓存机制
  8. 可重组合与不相邻组合
  9. linux系统下如何查找文件(根据文件属性或者根据文件内容)
  10. matlab2c使用c++实现matlab函数系列教程-mean函数