1. 过滤器类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Mes.Models
{
public class MyActionFilterAttribute : ActionFilterAttribute
{
public string Name { get; set; }
// Action执行之前先执行此方法
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
HttpContext.Current.Response.Write("<br/>OnActionExecuting" + Name);
}
// Action执行之后先执行此方法
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
HttpContext.Current.Response.Write("<br/>OnActionExecuted " + Name);
}
// ActionResult执行之前先执行此方法
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
HttpContext.Current.Response.Write("<br/>OnResultExecuting " + Name);
}
// ActionResult执行之后执行此方法
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
HttpContext.Current.Response.Write("<br/>OnResultExecuted " + Name);
}
}
}
2. 方法级别过滤
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Mes.Models;
namespace Mes.Controllers
{
public class HomeController : Controller
{
[MyActionFilter(Name = "Index Action")]
public ActionResult Index()
{
Response.Write("<p>Action执行了</p>");
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}
3. 控制器级别
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Mes.Models;
namespace Mes.Controllers
{
[MyActionFilter(Name = "HomeController")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}
4. 全局级别
using System.Web;
using System.Web.Mvc;
using Mes.Models;
namespace Mes
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new MyActionFilterAttribute() { Name = "Global" });
}
}
}
5. 允许多个标签同时起作用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Mes.Models
{
// 允许多个标签同时起作用
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class MyActionFilterAttribute : ActionFilterAttribute
{
public string Name { get; set; }
// Action执行之前先执行此方法
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
HttpContext.Current.Response.Write("<br/>OnActionExecuting" + Name);
}
// Action执行之后先执行此方法
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
HttpContext.Current.Response.Write("<br/>OnActionExecuted " + Name);
}
// ActionResult执行之前先执行此方法
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
base.OnResultExecuting(filterContext);
HttpContext.Current.Response.Write("<br/>OnResultExecuting " + Name);
}
// ActionResult执行之后执行此方法
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
HttpContext.Current.Response.Write("<br/>OnResultExecuted " + Name);
}
}
}