ASP.NET MVC2.0 自定义filters
2013-10-09 16:13
405 查看
今天大家共同学习下ASP.NET MVC2.0中自定义filters,这一节主要学习下ActionFilterAttribute,
ActionFilterAttribute继承IActionFilter, IResultFilter接口,并且继承FilterAttribute类.
ActionFilterAttribute可以监控action执行过程中所有阶段,包括日志,异常处理等功能.
主要包括以下四个重载方法
OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted
1.OnActionExecuting是在action开始前执行
用于身份验证和服务器端缓存输出
2. OnActionExecuted在action结束后执行
主要用于异常处理
3. OnResultExecuting在返回result前执行
主要用于设置客户端缓存和服务器端压缩
4. OnResultExecuted在返回result后执行
主要用于异常处理和页面尾部输出调试信息
以下两个DEMO,将展示actionfilter的具体用法
demo1:
在这个DEMO中我们将展示action在各个阶段的执行时间,并在页面中输出。
首先我们定义一个ActionLogAttribute类
[csharp] view plaincopyprint?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcAppOne.ActionFilters
{
publicclass ActionLogAttribute : ActionFilterAttribute
{
/// <summary>
/// 表示actionID
/// </summary>
publicint ID
{
get;
set;
}
/// <summary>
/// 在 action开始前执行
/// </summary>
/// <param name="filterContext"></param>
publicoverridevoid OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":actinon开始执行" + DateTime.Now.ToString() + "<br/>");
base.OnActionExecuting(filterContext);
}
/// <summary>
/// 在action结束后执行
/// </summary>
/// <param name="filterContext"></param>
publicoverridevoid OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":actinon执行结束" + DateTime.Now.ToString() + "<br/>");
base.OnActionExecuted(filterContext);
}
/// <summary>
/// 在result开始前执行
/// </summary>
/// <param name="filterContext"></param>
publicoverridevoid OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":result执行开始" + DateTime.Now.ToString() + "<br/>");
base.OnResultExecuting(filterContext);
}
/// <summary>
/// 在result结束后执行
/// </summary>
/// <param name="filterContext"></param>
publicoverridevoid OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":result执行结束" + DateTime.Now.ToString() + "<br/>");
base.OnResultExecuted(filterContext);
}
}
}
然后我们建立一个VIEW页面,ShowNews页面
然后再建立一个ACTION,并把属性标记在action上面
[csharp] view plaincopyprint?
[ActionFilters.ActionLog(ID=3)]
public ActionResult ShowNews()
{
return View();
}
此时我们运行ShowNews页面,我们将看到如下效果
demo2: 接着我们看第二个DEMO,在这个demo中,我们将展现actionFILTER中各个方法的作用
我们建一个类 ActionDealAttribute
[csharp] view plaincopyprint?
publicclass ActionDealAttribute : ActionFilterAttribute
{
publicoverridevoid OnActionExecuting(ActionExecutingContext filterContext)
{
//用户没有验证通过,转向登录页面
if (!filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("../account/logon");
}
}
publicoverridevoid OnActionExecuted(ActionExecutedContext filterContext)
{
//异常处理
if (filterContext.Exception!=null)
{
filterContext.ExceptionHandled=true;
filterContext.Result = new RedirectResult("../shared/Error");//转向错误页面
}
}
publicoverridevoid OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
}
publicoverridevoid OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
}
}
再建立一个news页面,并建立一个对应的action
如果访问news页面需要登录才能访问,就在news对应的action标记此属性,在OnActionExecuting中进行处理
[csharp] view plaincopyprint?
[ActionFilters.ActionDeal]
public ActionResult News()
{
return View();
}
如果news页面访问的时候出现异常,就会转向错误页面,在OnActionExecuted中进行处理
[csharp] view plaincopyprint?
[ActionFilters.ActionDeal]
publicvoid News()
{
thrownew Exception();
}
以上只是自定义action的简单用法,供大家参考。
代码下载:http://download.csdn.net/detail/zx13525079024/4375094
ActionFilterAttribute继承IActionFilter, IResultFilter接口,并且继承FilterAttribute类.
ActionFilterAttribute可以监控action执行过程中所有阶段,包括日志,异常处理等功能.
主要包括以下四个重载方法
OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted
1.OnActionExecuting是在action开始前执行
用于身份验证和服务器端缓存输出
2. OnActionExecuted在action结束后执行
主要用于异常处理
3. OnResultExecuting在返回result前执行
主要用于设置客户端缓存和服务器端压缩
4. OnResultExecuted在返回result后执行
主要用于异常处理和页面尾部输出调试信息
以下两个DEMO,将展示actionfilter的具体用法
demo1:
在这个DEMO中我们将展示action在各个阶段的执行时间,并在页面中输出。
首先我们定义一个ActionLogAttribute类
[csharp] view plaincopyprint?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcAppOne.ActionFilters
{
publicclass ActionLogAttribute : ActionFilterAttribute
{
/// <summary>
/// 表示actionID
/// </summary>
publicint ID
{
get;
set;
}
/// <summary>
/// 在 action开始前执行
/// </summary>
/// <param name="filterContext"></param>
publicoverridevoid OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":actinon开始执行" + DateTime.Now.ToString() + "<br/>");
base.OnActionExecuting(filterContext);
}
/// <summary>
/// 在action结束后执行
/// </summary>
/// <param name="filterContext"></param>
publicoverridevoid OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":actinon执行结束" + DateTime.Now.ToString() + "<br/>");
base.OnActionExecuted(filterContext);
}
/// <summary>
/// 在result开始前执行
/// </summary>
/// <param name="filterContext"></param>
publicoverridevoid OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":result执行开始" + DateTime.Now.ToString() + "<br/>");
base.OnResultExecuting(filterContext);
}
/// <summary>
/// 在result结束后执行
/// </summary>
/// <param name="filterContext"></param>
publicoverridevoid OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":result执行结束" + DateTime.Now.ToString() + "<br/>");
base.OnResultExecuted(filterContext);
}
}
}
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcAppOne.ActionFilters { public class ActionLogAttribute : ActionFilterAttribute { /// <summary> /// 表示actionID /// </summary> public int ID { get; set; } /// <summary> /// 在 action开始前执行 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuting(ActionExecutingContext filterContext) { filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":actinon开始执行" + DateTime.Now.ToString() + "<br/>"); base.OnActionExecuting(filterContext); } /// <summary> /// 在action结束后执行 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuted(ActionExecutedContext filterContext) { filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":actinon执行结束" + DateTime.Now.ToString() + "<br/>"); base.OnActionExecuted(filterContext); } /// <summary> /// 在result开始前执行 /// </summary> /// <param name="filterContext"></param> public override void OnResultExecuting(ResultExecutingContext filterContext) { filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":result执行开始" + DateTime.Now.ToString() + "<br/>"); base.OnResultExecuting(filterContext); } /// <summary> /// 在result结束后执行 /// </summary> /// <param name="filterContext"></param> public override void OnResultExecuted(ResultExecutedContext filterContext) { filterContext.RequestContext.HttpContext.Response.Write(ID.ToString()+":result执行结束" + DateTime.Now.ToString() + "<br/>"); base.OnResultExecuted(filterContext); } } }
然后我们建立一个VIEW页面,ShowNews页面
然后再建立一个ACTION,并把属性标记在action上面
[csharp] view plaincopyprint?
[ActionFilters.ActionLog(ID=3)]
public ActionResult ShowNews()
{
return View();
}
[ActionFilters.ActionLog(ID=3)] public ActionResult ShowNews() { return View(); }
此时我们运行ShowNews页面,我们将看到如下效果
demo2: 接着我们看第二个DEMO,在这个demo中,我们将展现actionFILTER中各个方法的作用
我们建一个类 ActionDealAttribute
[csharp] view plaincopyprint?
publicclass ActionDealAttribute : ActionFilterAttribute
{
publicoverridevoid OnActionExecuting(ActionExecutingContext filterContext)
{
//用户没有验证通过,转向登录页面
if (!filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("../account/logon");
}
}
publicoverridevoid OnActionExecuted(ActionExecutedContext filterContext)
{
//异常处理
if (filterContext.Exception!=null)
{
filterContext.ExceptionHandled=true;
filterContext.Result = new RedirectResult("../shared/Error");//转向错误页面
}
}
publicoverridevoid OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
}
publicoverridevoid OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
}
}
public class ActionDealAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { //用户没有验证通过,转向登录页面 if (!filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated) { filterContext.Result = new RedirectResult("../account/logon"); } } public override void OnActionExecuted(ActionExecutedContext filterContext) { //异常处理 if (filterContext.Exception!=null) { filterContext.ExceptionHandled=true; filterContext.Result = new RedirectResult("../shared/Error");//转向错误页面 } } public override void OnResultExecuting(ResultExecutingContext filterContext) { base.OnResultExecuting(filterContext); } public override void OnResultExecuted(ResultExecutedContext filterContext) { base.OnResultExecuted(filterContext); } }
再建立一个news页面,并建立一个对应的action
如果访问news页面需要登录才能访问,就在news对应的action标记此属性,在OnActionExecuting中进行处理
[csharp] view plaincopyprint?
[ActionFilters.ActionDeal]
public ActionResult News()
{
return View();
}
[ActionFilters.ActionDeal] public ActionResult News() { return View(); }
如果news页面访问的时候出现异常,就会转向错误页面,在OnActionExecuted中进行处理
[csharp] view plaincopyprint?
[ActionFilters.ActionDeal]
publicvoid News()
{
thrownew Exception();
}
[ActionFilters.ActionDeal] public void News() { throw new Exception(); }
以上只是自定义action的简单用法,供大家参考。
代码下载:http://download.csdn.net/detail/zx13525079024/4375094
相关文章推荐
- ASP.NET MVC2.0 自定义filters
- 利用 ASP.NET 2.0 创建自定义 Web 控件
- 自定义MembershipProvider来利用Asp.net 2.0 Login控件的登陆和修改密码模块
- .NET/ASP.NETMVC 大型站点架构设计―迁移Model元数据设置项(自定义元数据提供程序)
- Asp.net MVC 自定义RouteHandler
- Asp.net 2.0 自定义伪静态源码
- Asp.net 2.0 自定义控件开发[创建自定义浮动菜单FloadMenu控件][示例代码下载]
- 【ASP.NET】 ASP.NET MVC 3 & MEF 2.0
- 关于ASP.NET MVC 2.0 开发记要
- ASP.NET MVC 模版切换 自定义模板路径
- 自定义ASP.net 2.0 Membership的步骤,和entry 'AspNetSqlMembershipProvider' has already been added错误的解决
- ASP.NET MVC2.0 安装后连接 ASPNETDB.MDF 出错
- 利用ASP.NET 2.0创建自定义Web控件
- 【转】ASP.NET MVC 3 Service Location, Part 4: Filters
- 认识 ASP.NET 3.5 MVC 路由 创建自定义路由
- ASP.NET MVC中的统一化自定义异常处理
- 为ASP.NET MVC 2.0添加Razor模板引擎 (on .NET4)
- ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)
- 理解ASP.NET MVC Framework Action Filters
- 自定义asp.net mvc 3目录结构