|
Če filtri, uvedeni prej, ne izpolnjujejo zahtev, bo ta prilagojen filter uporaben, če želite definirati svojo logiko procesiranja pred in po izvajanju in vrnitvi metode vedenja. Za prilagoditev filtra podedujete razred ActionFilterAtribut, ki je abstraktni razred, ki implementira vmesnika IActionFilter in IResultFilter, predvsem tako, da prepišete štiri virtualne metode, da dosežete logiko vbrizgavanja pred in po izvajanju in vrnitvi metode vedenja metoda | parameter | opis | OnActionExecuting | DejanjeIzvajanjeKonteksta | Izvedite pred izvajanjem vedenjske metode | OnActionExecute | DejanjeIzvedenoKontekst | Izvedite po izvedbi vedenjske metode | OnResultExecuting | RezultatIzvajanjeKonteksta | Izvedite pred vrnitvijo metode vedenja | OnResultIzvršeno | RezultatIzvedeniKontekst | Izvedite po vrnitvi metode vedenja |
Štiri metode se izvajajo v vrstnem redu OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Argumenti zgornjih štirih metod so podedovani iz razreda ContollorContext. Na primer, spodaj je definiran prilagojen 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;
- }
- }
Kopiraj kodo
Vedenjske metode za njegovo uporabo so opredeljene spodaj - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Kopiraj kodo
|