|
Kui varem kasutusele võetud filtrid ei vasta nõuetele, peaks see kohandatud filter olema kasulik, kui soovid määratleda oma töötlemisloogika enne ja pärast käitumismeetodi käivitamist ja tagastamist. Filtri kohandamiseks pärid ActionFilterAttribute klassi, mis on abstraktne klass ja rakendab IActionFilter ja IResultFilter liideseid, peamiselt kirjutades ümber neli virtuaalset meetodit, et saavutada süstimisloogika enne ja pärast käitumismeetodi täitmist ja tagastamist Meetod | parameeter | kirjeldus | OnActionExecuting | ActionExecutingContext | Käivita enne käitumusliku meetodi käivitamist | OnActionExecuted | ActionExecutedContext | Käivita pärast käitumusliku meetodi käivitamist | OnResultExecuting | ResultExecutingContext | Käivita enne, kui käitumismeetod tagastab | OnResultExecuted | ResultExecutedContext | Käivita pärast käitumismeetodi tagastamist |
Neli meetodit täidetakse järjekorras: OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Ülaltoodud nelja meetodi argumendid pärinevad ContollorContext klassist. Näiteks on allpool määratletud kohandatud filter
- 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;
- }
- }
Kopeeri kood
Käitumuslikud meetodid selle kasutamiseks on määratletud allpool - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Kopeeri kood
|