ASP.NET MVC过滤器
2018-06-17 19:25:30来源:未知 阅读 ()
在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. 过滤器的执行顺序
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:C#和ASP.NET之事件
- ASP.NET简单验证码 2018-06-21
- MVC学习一:EF 2018-06-21
- 【转】ASP.NET"正在中止线程"错误原因 2018-06-21
- ASP.NET的一套笔试题 2018-06-21
- ASP.NET - 演练:创建网页以显示 XML 数据 2018-06-21
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash