|
В случай че въведените по-рано филтри не отговарят на изискванията, този персонализиран филтър би бил полезен, ако искате да дефинирате собствена логика на обработката преди и след изпълнението и връщането на поведенческия метод. За да персонализирате филтъра, се наследява класът ActionFilterAttribute, който е абстрактен клас, реализиращ интерфейсите IActionFilter и IResultFilter, главно чрез пренаписване на четирите виртуални метода, за да се постигне логика на инжектиране преди и след изпълнението и връщането на поведенческия метод. метод | параметър | описание | OnActionExecuting | ActionExecutingContext | Изпълнете преди поведенческият метод да бъде изпълнен | OnActionExecuted | ActionExecutedContext | Изпълнение след като поведенческият метод бъде изпълнен | OnResultExecuting | ResultExecutingContext | Изпълни се преди методът на поведение да се върне | OnResultExecuted | ResultExecutedContext | Изпълнете се след като методът на поведението бъде върнат |
Четирите метода се изпълняват в реда на OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Аргументите на горните четири метода са наследени от класа ContollorContext. Например, по-долу е дефиниран персонализиран филтър
- public class MyCustomerFilterAttribute : ActionFilterAttribute
- {
- public string Message { get; set; }
- public override void OnActionExecuted(ActionExecutedContext filterContext)
- {
- base.OnActionExecuted(filterContext);
- filterContext.HttpContext.Response.Write(string.Format( "<br/> {0} Action finish Execute.....",Message));
- }
- public override void OnActionExecuting(ActionExecutingContext filterContext)
- {
- CheckMessage(filterContext);
- filterContext.HttpContext.Response.Write(string.Format("<br/> {0} Action start Execute.....", Message));
- base.OnActionExecuting(filterContext);
- }
- public override void OnResultExecuted(ResultExecutedContext filterContext)
- {
- filterContext.HttpContext.Response.Write(string.Format("<br/> {0} Action finish Result.....", Message));
- base.OnResultExecuted(filterContext);
- }
- public override void OnResultExecuting(ResultExecutingContext filterContext)
- {
- filterContext.HttpContext.Response.Write(string.Format("<br/> {0} Action start Execute.....", Message));
- base.OnResultExecuting(filterContext);
- }
- private void CheckMessage(ActionExecutingContext filterContext)
- {
- if(string.IsNullOrEmpty( Message)||string.IsNullOrWhiteSpace(Message))
- Message = filterContext.Controller.GetType().Name + "'s " + filterContext.ActionDescrip{过滤}tor.ActionName;
- }
- }
Копирай код
Поведенческите методи за използване са дефинирани по-долу - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Копирай код
|