|
Dans le cas où les filtres introduits précédemment ne répondraient pas aux exigences, ce filtre personnalisé devrait être utile si vous souhaitez définir votre propre logique de traitement avant et après l’exécution et le retour de la méthode de comportement. Pour personnaliser un filtre, vous héritez de la classe ActionFilterAttribute, qui est une classe abstraite implémentant les interfaces IActionFilter et IResultFilter, principalement en réécrivant les quatre méthodes virtuelles pour obtenir une logique d’injection avant et après l’exécution et le retour de la méthode de comportement méthode | paramètre | description | OnActionExecuting | ActionExécutingContext | Exécuter avant que la méthode comportementale ne soit exécutée | OnActionExécuté | ActionExécutéContexte | Exécuter après l’exécution de la méthode comportementale | OnResultExecuting | RésultExécutingContext | Exécuter avant que la méthode de comportement ne revienne | OnResultExecuted | RésultExécutéContexte | Exécuter après que la méthode de comportement a été retournée |
Les quatre méthodes sont exécutées dans l’ordre OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Les arguments des quatre méthodes ci-dessus sont hérités de la classe ContollorContext. Par exemple, un filtre personnalisé est défini ci-dessous
- 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;
- }
- }
Code de copie
Les méthodes comportementales pour son utilisation sont définies ci-dessous - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Code de copie
|