Filter类型 接口 MVC的默认实现 Description
Authorization IAuthorizationFilter AuthorizeAttribute 最先执行,在其他类型的filter和action方法前执行
Action IActionFilter ActionFilterAttribute 在action方法执行前和执行后执行
Result IResultFilter ActionFilterAttribute 在result执行前和执行后执行
Exception IExceptionFilter HandleErrorAttribute 在抛出异常时执行,(异常发生在action/result/filter)
 
Authorization Filter
Authorization Filter是所有Filter类型中第一个执行的Filter,它在action方法调用前执行。Authorization Filter需要实现IAuthorizationFilter接口:
public interface IAuthorzationFilter
{
void OnAuthorization(AuthorizationContext context);
}
可以看出,我们要实现Authorization机制的代码就需要放在OnAuthorization方法中,而其参数类型AuthorizationContext继承于ControllerContext,如下所示:
 public class AuthorizationContext : ControllerContext
{ public AuthorizationContext(); public AuthorizationContext(ControllerContext controllerContext, ActionDescriptor actionDescriptor);
public virtual ActionDescriptor ActionDescriptor { get; set; }
public ActionResult Result { get; set; } }
AuthorzationContext额外提供了Result属性和ActionDescriptor属性,result属性表示授权阶段呈现的ActionResult,而ActionDescriptor则包含了当前执行Action的信息。
Asp.net MVC给我们提供了一个IAuthorzationFilter的实现AuthorizeAttribute(没错,它是一个Attribute,继承于FilterAttribute),该Attribute可以应用于Controller和Action, 它包含Roles和Users属性,指定特定的角色和用户才可以授权使用。比如:
public class HomeController : Controller
{
[Authorize(Users = "zhang, zheng", Roles = "admin")]
public ActionResult Index()
{
return View();
}
}
以上代码表示只有用户zhang,zheng并且拥有角色admin的用户才可以被授权执行Index Action。

Exception Filter
当一个未处理异常抛出时,Exception Filter将会被执行。Exception Filter需要实现IExceptionFilter接口:
public interface IExceptionFilter
{
void OnException(ExceptionContext filerContext);
}
ExceptionContext同样继承于ControllerContext,它提供了以下额外的属性:
属性名 类型 描述
ActionDescriptor ActionDescriptor 提供当前所执行的Action的信息
Result ActionResult Exception Filter所呈现的ActionResult
Exception Exception 未处理的异常
ExceptionHandled bool 表示是否已有其他filter处理过此异常

ExceptionHandled是一个很重要的属性。一般来说,当一个Exception Filter执行时,我们首先需要检查ExceptionHandled属性,如果为true,则表示已有其他filter处理过此异常了,就不需要再次进行处理了,以免覆盖其他filter所解决的Exception。如果为false,则对该Exception进行相应的处理,处理之后将ExceptionHandled属性设置为true。默认的,如果没有Exception Filter将ExceptionHandled属性设置为true, ASP.NET MVC将使用默认的异常处理,即显示我们经常看到的异常页面。

 

ASP.NET MVC学习笔记-----Filter(1)的更多相关文章

  1. ASP.NET MVC学习笔记-----Filter

    ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...

  2. ASP.NET MVC学习笔记-----Filter(2)

    接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...

  3. ASP.NET MVC学习笔记-----Filter2

    ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...

  4. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  5. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  6. ASP.NET MVC 学习笔记(1)

    从头开始系统地学习ASP.NET MVC 为什么要学习ASP.NET MVC?原因很多,可以先来看一下最早的ASP.NET WebForm的一些缺点: 传说中面试经常要问到的ASP.NET WebFo ...

  7. ASP.NET MVC学习笔记(一) 从路由开始创建mvc

    之前一篇写一半发现版本太老了,是基于mvc2的. 两本参考书编写的顺序各方面都不太一样.决定重新写一篇. 我这篇文章基于mvc5,vs2015 参考书:Will保哥的ASP.NET MVC4开发指南 ...

  8. ASP.NET MVC 学习笔记之面向切面编程与过滤器

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

  9. 【转】ASP.NET MVC学习笔记-Controller的ActionResult

    1. 返回ViewResult public ActionResult Index()   {       ViewData["Message"] = "Welcome ...

随机推荐

  1. Git版本库的创建(Ubuntu)

    在Ubuntu上学习Git随笔. 一. git 仓库的安装 git 在终端用git命令查看Ubuntu是否安装git版本库,如果没有安装,最新版本(Ubuntu18.04)会提示用下面命令进行安装. ...

  2. 谷歌算法研究员:我为什么钟爱PyTorch?

    老铁们好!我是一名前谷歌的算法研究员,处理深度学习相关项目已有三年经验,接下来会在平台上给大家分享一些深度学习,计算机视觉和统计机器学习的心得体会,当然了内推简历一定是收的.这篇文章,不想说太多学术的 ...

  3. 《Linux内核设计与实现》学习记录一

    chapter1 Linux内核简介 前言:Unix是一个具有相似应用程序编程接口(API)并且基于相似设计理念的操作系统家族. 1.1 Unix的历史 1.Unix演化版实现了任务管理.换页机制.T ...

  4. 第一个sprint与第二个sprint阶段总结

    总体: 在第一个sprint中,团队里的小伙伴都在积极努力的配合,基本按照流程做了一次Sprint,大家一块进行计划会议,一块估计任务工时,但是还是有一些意外的事情,这段时间大家都没什么精力放在这门上 ...

  5. 第四次WBS

    分解原则 1.将主体目标逐步细化分解,最底层的日常活动可直接分派到个人去完成: 2.每个任务原则上要求分解到不能再细分为止: 3.日常活动要对应到人.时间和资金投入. 二.任务分解的方法 1.采用树状 ...

  6. final评论1

    1-约跑APP 小组准备的非常的充分,还带了摄像头,发布过程清晰.团队的约跑项目界面相较于Beta版本进行了美化,增加了背景图片,使项目看起来更美观.同时项目支持聊天信息的接收和发送,个人觉得他们组的 ...

  7. LDAP的前世今生

    上世界80年代,就有了LDAP的雏形. 我接触到最早的Windows系列的服务器,是Windows2000 Professional版本里可以加入ActiveDirectory,后来从Windows2 ...

  8. Mac安装Appium的Android环境

    1.下载android sdk http://down.tech.sina.com.cn/page/45703.html   2.解压,配置环境变量   ANDROID_HOME=/Users/wp/ ...

  9. Android GridView数据绑定

    java代码构造个泛型数组用于存放item,作为title        List<Map<String, Object>> items = new ArrayList< ...

  10. JSONP使用及注意事项小结

    什么是JSONP 三句话总结: 概念:JSONP(JSON with Padding)是JSON的一种"使用模式". 目的:用于解决主流浏览器的跨域数据访问的问题. 原理:利用 & ...