|
Ha a korábban bevezetett szűrők nem felelnek meg a követelményeknek, ez az egyedi szűrő hasznos lehet, ha saját feldolgozási logikát szeretnél meghatározni a viselkedési módszer végrehajtása és visszaküldése előtt és után. A szűrő testreszabásához az ActionFilterAttribute osztályt örököljük, amely egy absztrakt osztály, amely az IActionFilter és IResultFilter interfészeket valósítja meg, főként a négy virtuális módszer újraírásával, hogy a viselkedési metódus végrehajtása és visszatérése előtt és után elérjék az injekciós logikát módszer | paraméter | leírás | OnActionExecuting | ActionExecutingContext | Végrehajtás a viselkedési módszer végrehajtása előtt | OnActionExecuted | ActionExecutedContext | Végrehajtás a viselkedési módszer végrehajtása után | OnResultExecuting | EredményExecutingContext | Végrehajtás, mielőtt a viselkedési metódus visszatér | OnResultExecuted | EredményExecutedContext | Végrehajtás, miután visszanyerte a viselkedési metódust |
A négy módszert az OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted-ben hajtják végre. A fenti négy módszer érvei a ContollorContext osztályból örököltek. Például egy egyedi szűrő az alábbiakban definiálva van
- 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;
- }
- }
Kód másolása
A viselkedési módszereket az alábbiakban definiáljuk - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Kód másolása
|