|
Jei anksčiau pristatyti filtrai neatitinka reikalavimų, šis pasirinktinis filtras turėtų būti naudingas, jei norite apibrėžti savo apdorojimo logiką prieš ir po elgsenos metodo vykdymo ir grąžinimo. Norėdami tinkinti filtrą, paveldėkite ActionFilterAttribute klasę, kuri yra abstrakti klasė, kuri įgyvendina IActionFilter ir IResultFilter sąsajas, daugiausia perrašydami keturis virtualius metodus, kad būtų pasiekta injekcijos logika prieš ir po elgesio metodo vykdymo ir grąžinimo metodas | Parametras | apibūdinimas | OnActionExecuting | ActionExecutingContext | Vykdyti prieš vykdant elgsenos metodą | OnActionExecuted | ActionExecutedContext | Vykdyti įvykdžius elgsenos metodą | OnResultExecuting | ResultExecutingContext | Vykdyti prieš grįžtant elgsenos metodui | OnResultExecuted | ResultExecutedContext | Vykdyti grąžinus elgsenos metodą |
Keturi metodai vykdomi OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Aukščiau pateiktų keturių metodų argumentai yra paveldėti iš ContollorContext klasės. Pavyzdžiui, pasirinktinis filtras apibrėžiamas toliau
- 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;
- }
- }
Kopijuoti kodą
Jo naudojimo elgesio metodai yra apibrėžti toliau - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Kopijuoti kodą
|