在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)。
- 控制器上面
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. 过滤器的执行顺序
ASP.NET MVC过滤器的更多相关文章
-
ASP.NET MVC 过滤器(一)
ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢 ...
-
ASP.NET MVC 过滤器(三)
ASP.NET MVC 过滤器(三) 前言 本篇讲解行为过滤器的执行过程,过滤器实现.使用方式有AOP的意思,可以通过学习了解过滤器在框架中的执行过程从而获得一些AOP方面的知识(在顺序执行的过程中, ...
-
ASP.NET MVC 过滤器(四)
ASP.NET MVC 过滤器(四) 前言 前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍. ASP ...
-
ASP.NET MVC 过滤器(五)
ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了讲解,如果在控制器行为的执行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大 ...
-
ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)
上一篇文章介绍了使用Authorize特性实现了ASP.NET MVC中针对Controller或者Action的授权功能,实际上这个特性是MVC功能的一部分,被称为过滤器(Filter),它是一种面 ...
-
Asp.net Mvc 过滤器执行顺序
Asp.net Mvc 过滤器执行顺序: IAuthorizationFilter(OnAuthorization)----->IActionFilter(OnActionExecuting)- ...
-
ASP.NET MVC过滤器(一)
MVC过滤器是加在 Controller 或 Action 上的一种 Attribute,通过过滤器,MVC 网站在处理用户请求时,可以处理一些附加的操作,如:用户权限验证.系统日志.异常处理.缓存等 ...
-
ASP.NET MVC 过滤器开发与使用
ASP.NET MVC 中给我们提供了内置的过滤器,通过过滤器,我们可以在控制器内的方法前后,添加必须的业务逻辑,如权限验证,身份验证,错误处理等. 今天,我们主要介绍3个过滤器:OutputCach ...
-
Asp.Net MVC过滤器小试牛刀
在上学期间学习的Asp.Net MVC,基本只是大概马马虎虎的了解,基本处于知其然而不知其所以然.现在到上班,接触到真实的项目,才发现还不够用,于是从最简单的过滤器开始学习.不得不说MVC的过滤器真是 ...
随机推荐
-
《利用python进行数据分析》读书笔记--第八章 绘图和可视化
http://www.cnblogs.com/batteryhp/p/5025772.html python有许多可视化工具,本书主要讲解matplotlib.matplotlib是用于创建出版质量图 ...
-
【转载】CentOS6.5_X64下安装配置MongoDB数据库
[转载]CentOS6.5_X64下安装配置MongoDB数据库 2014-05-16 10:07:09| 分类: 默认分类|举报|字号 订阅 下载LOFTER客户端 本文转载自zhm&l ...
-
Vim经典讲解
http://blog.csdn.net/niushuai666/article/details/7275406
-
【欧拉函数】【HDU1286】 找新朋友
找新朋友 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
-
UMeditor 百度编辑器Mini学习
准备开始研究百度的mini编辑器 1.4.3的昨天配置好了 ,也可以用了(.net 3.5) 为此我废了好大的力 研究了一天才弄好 结果今天一来上司就说 这个1.4.3 我们没必要用这么大的 用 ...
-
Chapter 5 Blood Type——14
"You're wrong." His voice was almost inaudible. “你错了.” 他的声音几乎听不见 He looked down, stealing ...
-
secureCRT自动断开的解决方法
转: secureCRT自动断开的解决方法 secureCRT自动断开的解决方法 在secureCRT上登录时,一段时间不用的话会自动断开,必须重新连接,有点麻烦. 有时候服务器端的 /etc/pro ...
-
Others-大数据平台Lambda架构浅析(全量计算+增量计算)
大数据平台Lambda架构浅析(全量计算+增量计算) 2016年12月23日 22:50:53 scuter_victor 阅读数:1642 标签: spark大数据lambda 更多 个人分类: 造 ...
-
Mybatis中的几种注解映射
1. 普通映射 2. @Select("select * from mybatis_Student where id=#{id}") 3. public Student getS ...
-
django的基本用法
1.项目创建 # 新建一个文件夹DjangoProjects# 切换到需要的文件夹创建虚拟环境 C:\Projects\DjangoProjects>python -m venv test_ve ...