|
Gadījumā, ja iepriekš ieviestie filtri neatbilst prasībām, šim pielāgotajam filtram vajadzētu noderēt, ja vēlaties definēt savu apstrādes loģiku pirms un pēc uzvedības metodes izpildes un atgriešanas. Lai pielāgotu filtru, jūs mantojat klasi ActionFilterAttribute, kas ir abstrakta klase, kas ievieš IActionFilter un IResultFilter saskarnes, galvenokārt pārrakstot četras virtuālās metodes, lai panāktu injekcijas loģiku pirms un pēc uzvedības metodes izpildes un atgriešanas metode | Parametru | apraksts | OnActionExecuting | ActionExecutingContext | Izpildīt pirms uzvedības metodes izpildes | OnActionExecuted | ActionExecutedContext | Izpildīt pēc uzvedības metodes izpildes | OnResultExecuting | ResultExecutingContext | Izpildīt pirms uzvedības metodes atgriešanās | OnResultExecuted | RezultātsIzpildītsKonteksts | Izpildīt pēc uzvedības metodes atgriešanas |
Četras metodes tiek izpildītas secībā OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Iepriekš minēto četru metožu argumenti ir pārmantoti no ContollorContext klases. Piemēram, pielāgots filtrs ir definēts tālāk
- 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ēt kodu
Uzvedības metodes tās izmantošanai ir definētas tālāk - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Kopēt kodu
|