|
Pokud filtry zavedené dříve nesplňují požadavky, tento vlastní filtr by se mohl hodit, pokud chcete definovat vlastní logiku zpracování před a po provedení a vrácení metody chování. Pro přizpůsobení filtru zdědíte třídu ActionFilterAtribut, což je abstraktní třída, která implementuje rozhraní IActionFilter a IResultFilter, především přepisováním čtyř virtuálních metod tak, aby bylo dosaženo injekční logiky před a po vykonání a návratu metody chování metoda | parametr | popis | OnActionExecuting | AkceVykonáníKontextu | Skonecujte před vykonáním behaviorální metody | OnActionExecuted | AkceProvedenýKontext | Vykonejte po provedení behaviorální metody | OnResultExecuting | VýsledekVykonáníKontextu | Spustit před návratem metody chování | OnResultExecuted | VýsledekVykonanýKontext | Spustit po vrácení metody chování |
Čtyři metody se spouštějí v pořadí OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Argumenty výše uvedených čtyř metod jsou převzaty z třídy ContollorContext. Například níže je definován vlastní filtr
- 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;
- }
- }
Kopírovat kód
Metody chování pro jeho použití jsou definovány níže - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Kopírovat kód
|