|
În cazul în care filtrele introduse anterior nu îndeplinesc cerințele, acest filtru personalizat ar trebui să fie util dacă vrei să-ți definești propria logică de procesare înainte și după ce metoda de comportament este executată și returnată. Pentru a personaliza un filtru, moștenești clasa ActionFilterAttribute, care este o clasă abstractă ce implementează interfețele IActionFilter și IResultFilter, în principal prin rescrierea celor patru metode virtuale pentru a obține logica de injectare înainte și după executarea și revenirea metodei de comportament metodă | parametru | descriere | OnActionExecuting | AcțiuneExecutândContext | Executați înainte ca metoda comportamentală să fie executată | OnActionExecuted | AcțiuneExecutatContext | Execută după ce metoda comportamentală este executată | OnResultExecuting | ResultExecutingContext | Executați înainte ca metoda de comportament să revină | OnResultExecuted | RezultatExecutatContext | Execută după ce metoda de comportament este returnată |
Cele patru metode sunt executate în ordinea OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Argumentele celor patru metode de mai sus sunt moștenite din clasa ContollorContext. De exemplu, un filtru personalizat este definit mai jos
- 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;
- }
- }
Cod de copiere
Metodele comportamentale de utilizare sunt definite mai jos - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Cod de copiere
|