1. AuthorizationFilter: 从命名上看这个用于完成授权相关的工作。

  AuthorizationFilter 实现了 IAuthorizationFilter 接口, 如果我们希望执行Action之前做点什么 就用这个AuthorizationFilter 来实现。

IAuthorizationFilter 接口提供了 OnAuthorization 方法来执行授权操作。

1.1 AuthorizeAttribute:

        [Authorize(Users = "Foo")]
[Authorize(Roles = "Bar")]
public ActionResult Index()
{
return View();
}

1.2 RequitreHttpsAttribute: 从名称看可以知道 要求请求用户总是以Https 请求的方式访问目标Action。

1.3 ValidateInputAttribute: ValidateInput用于验证请求的输入。

2. ActionFilter:  ActionFilter 实现了接口IActionFilter  ,ActionFilter 是在我们执行Action 前后执行一些额外的操作。

IActionFilter 具有如下两个方法。 它们分别在Action 执行前后被执行。

我们可从  ActionExecutedContext 和 ActionExecutingContext 两个上下文对象中获取当前Action的参数列表。

    public interface IActionFilter
{
void OnActionExecuted(ActionExecutedContext filterContext); void OnActionExecuting(ActionExecutingContext filterContext);
}

2.1 ActionFilter 的执行机制:当ActionInvoker在执行Action 的时候会根据Order和Scope属性对ActionFilter 进行排序。然后根据当前ControllerContext 和ActionDescripor 创建一个ActionExecutingContext对象,最后将其作为参数依次调用所有的ActionFitler的OnActionExecuting方法。

ActionFilter的OnActionExecuting执行完毕后再执行Action方法,

ActionFilter的ActionExecuted则是在Action执行完毕后再 执行。

2.2 ActionFilter中的异常处理:

如果ActionFilter链的第一个ActionFilter 在执行OnActionExecuting和ActionExecuted 方法过程中出现异常,那么这个异常会被直接抛出,不过不是第一个

ActionFilter,抛出异常会被捕获。

3 ExceptionFilter: 异常处理筛选器。

IExceptionFilter 具有唯一的方法OnException 用于异常处理

1. 执行的优先级  Order 和 Scope ,排在后面的优先级更。。

2. ExceptionContext 的 ExceptionHandled 设置ture 并不能阻止后续ExceptionFiter的执行。

3. 如果ExceptionFilter在执行OnException过程中出现异常,整个ExceptionFilter链的执行将立即停止,并且抛出异常。

    public interface IExceptionFilter
{
void OnException(ExceptionContext filterContext);
}

4. EntLib 微软企业库 实现自动化异常处理。

5.ResultFilter:Action方法返回一个ActionResult对象。  IResultFilter 提供了OnResultExecuted和 OnResultExecuting 两个方法,

它们将在 ActionResult 执行前后被执行,如果Action 返回一个ActionResult对象,ActionInvoker在完成Action方法的执行后 会调用返回的ActionResult对象

的ExecuteResult方法实习对请求的响应。

    public interface IResultFilter
{
void OnResultExecuted(ResultExecutedContext filterContext); void OnResultExecuting(ResultExecutingContext filterContext);
}

MVC4 4种Filter的更多相关文章

  1. 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”

    通过源码了解ASP.NET MVC 几种Filter的执行过程   一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...

  2. ASP.NET Core五种Filter

    Authorization Filter Authorization是五种Filter中优先级最高的,通常用于验证Request合不合法,不合法后面就直接跳过. 权限控制器过滤器,可以通过Authon ...

  3. 通过源码了解ASP.NET MVC 几种Filter的执行过程

    一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神的工作,而且很多人觉得平时根本不需要知道这些,会用就行了.其实阅读源 ...

  4. ASP.NET MVC 几种 Filter 的执行过程源码解析

    一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神的工作,而且很多 人觉得平时根本不需要知道这些,会用就行了.其实阅读 ...

  5. 几种filter的比较

    需要整理 Gaussian filter https://en.wikipedia.org/wiki/Gaussian_filter Laplacian/Laplacian of Gaussian h ...

  6. [ASP.NET MVC 小牛之路]11 - Filter

    Filter(筛选器)是基于AOP(面向方面编程)的设计,它的作用是对MVC框架处理客户端请求注入额外的逻辑,以非常简单优美的方式实现横切关注点(Cross-cutting Concerns).横切关 ...

  7. Asp.Net MVC Filter 实现方式和作用范围控制

    MVC中的Filte 简单又优雅的实现了AOP ,在日志,权限,缓存和异常处理等方面用的比较多.但本文不是讨论Filter这些功能点,而是总结Filter实现的方式.说实现也不太准确,也就是它的呈现方 ...

  8. HTMLParser使用详解(3)- 通过Filter访问内容

    HTMLParser遍历了网页的内容以后,以树(森林)结构保存了结果.HTMLParser访问结果内容的方法有两种.使用Filter和使用Visitor. (一)Filter类顾名思义,Filter就 ...

  9. .net HTMLParser详细使用说明 强大的Filter类 解析HTML文档如此简单

    背景: HTMLParser原本是一个在sourceforge上的一个Java开源项目,使用这个Java类库可以用来线性地或嵌套地解析HTML文本.他的 功能强大和开源等特性吸引了大量Web信息提取的 ...

随机推荐

  1. Windbg在.net性能问题排查hang情况的应用思路

    1.使用~*kb 2000 查看本地锁的callstack情况,有sleep的线程关注是否占用锁,有wait等待的线程可能是正在等待锁资源. 2.使用~*e!clrstack 查看.net的calls ...

  2. LeetCode题解 #1 Two Sum

    在LeetCode做的第一到题 题目大意:给出n个数,在其中找出和为一个特定数的两个数. Input: numbers={2, 7, 11, 15}, target=9Output: index1=1 ...

  3. wwwroot文件无读取某个文件夹权限(对IIS_USER增加全部权限)

  4. TextBox 设置数据源的自动补全输入字符串功能

    这个东西首先说明是不是自己原创,但是比较简单.所以讲起分享如下.主要是用到TextBox的自动补全属性,这个东西虽然自己以前经常用TextBox,但是补全从没接触过. 关键代码是在窗体载入时加载如下代 ...

  5. Shiro配置cookie以及共享Session和Session失效问题

    首先我们看Shiro的会话管理器的配置 <!-- shiro会话管理 --> <!-- 即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中:会话可以是普通 JavaSE ...

  6. Linux运维常见故障排查和处理的33个技巧汇总

    作为linux运维,多多少少会碰见这样那样的问题或故障,从中总结经验,查找问题,汇总并分析故障的原因,这是一个Linux运维工程师良好的习惯.每一次技术的突破,都经历着苦闷,伴随着快乐,可我们还是执着 ...

  7. C#异步编程的一些认识

    1.使用委托类型的BeginXXX,EndXXX 2.使用事件 3.使用aysnc,await关键字,会自动切换回UI线程,启动方法的线程可以被重用,线程没有阻塞.内部其实是封闭了Task类的Cont ...

  8. 【302】C# TreeView 控件使用说明

    参考:C# 中treeview 树节点图标的动态加载,及选中时图标改变 参考:C# TreeView 控件的综合使用方法 参考:TreeView 类 参考:TreeNode 类 1. 添加根和子级 通 ...

  9. C# 对象封装为json格式

    1 对象 public class Person { public string Name { get; set; } public int Age { get; set; } public Date ...

  10. Mac shell使用技巧总结(转)

    1.文件操作 常用目录 /Systme/Library/Extensions // 驱动所在目录 /User/XXX/Desktop // 桌面目录 资源库 chflags nohidden ~/Li ...