|
Falls die zuvor eingeführten Filter die Anforderungen nicht erfüllen, sollte dieser benutzerdefinierte Filter nützlich sein, wenn Sie Ihre eigene Verarbeitungslogik vor und nach der Ausführung und Rückgabe der Verhaltensmethode definieren möchten. Um einen Filter anzupassen, erbst du die ActionFilterAttribute-Klasse, eine abstrakte Klasse, die die Schnittstellen IAectionFilter und IResultFilter implementiert, hauptsächlich indem die vier virtuellen Methoden umgeschrieben werden, um die Injektionslogik vor und nach der Ausführung und Rückgabe der Verhaltensmethode zu erreichen Methode | Parameter | Beschreibung | OnActionAusführen | ActionExecutingContext | Führen Sie aus, bevor die Verhaltensmethode ausgeführt wird | OnActionAusgeführt | ActionExecutedContext | Ausführen, nachdem die Verhaltensmethode ausgeführt wurde | OnResultAusführen | ResultExecutingContext | Führen Sie aus, bevor die Verhaltensmethode zurückkehrt | OnResultAusgeführt | ResultExecutedContext | Ausführen, nachdem die Verhaltensmethode zurückgegeben wurde |
Die vier Methoden werden in der Reihenfolge OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecute ausgeführt. Die Argumente der oben genannten vier Methoden sind von der Klasse ContollorContext übernommen. Zum Beispiel wird unten ein benutzerdefinierter Filter definiert
- 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;
- }
- }
Code kopieren
Die Verhaltensmethoden zur Anwendung sind im Folgenden definiert - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Code kopieren
|