|
Hvis filtrene som ble introdusert tidligere ikke oppfyller kravene, bør dette tilpassede filteret være nyttig hvis du vil definere din egen prosesseringslogikk før og etter at atferdsmetoden kjøres og returneres. For å tilpasse et filter arver du ActionFilterAttribut-klassen, som er en abstrakt klasse som implementerer grensesnittene IActionFilter og IResultFilter, hovedsakelig ved å omskrive de fire virtuelle metodene for å oppnå injeksjonslogikk før og etter utførelse og retur av atferdsmetoden metode | parameter | beskrivelse | OnActionExecuting | ActionExecutingContext | Kjør før den atferdsbaserte metoden kjøres | PåHandlingUtført | ActionExecutedContext | Kjør etter at den atferdsbaserte metoden er utført | OnResultExecuting | ResultatUtførelseKontekst | Kjør før atferdsmetoden returnerer | OnResultExecuted | ResultExecutedContext | Kjør etter at atferdsmetoden er returnert |
De fire metodene kjøres i rekkefølgen OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Argumentene for de ovennevnte fire metodene er arvet fra ContollorContext-klassen. For eksempel er et tilpasset filter definert nedenfor
- 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;
- }
- }
Kopier koden
De atferdsmessige metodene for å bruke den er definert nedenfor - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Kopier koden
|