|
Nel caso in cui i filtri introdotti prima non soddisfino i requisiti, questo filtro personalizzato dovrebbe essere utile se vuoi definire la tua logica di elaborazione prima e dopo l'esecuzione e il ritorno del metodo di comportamento. Per personalizzare un filtro, si eredita la classe ActionFilterAttribute, che è una classe astratta che implementa le interfacce IActionFilter e IResultFilter, principalmente riscrivendo i quattro metodi virtuali per ottenere la logica di iniezione prima e dopo l'esecuzione e il ritorno del metodo di comportamento metodo | parametro | descrizione | OnActionExecuting | AzioneEsecuzioneContesto | Esegui prima che il metodo comportamentale venga eseguito | OnActionEseguito | ActionExecutedContext | Esegui dopo che il metodo comportamentale è stato eseguito | OnResultExecuting | RisultatoContestoEsecuzione | Esegui prima che il metodo di comportamento restituisca | OnResultExecuted | RisultatoContestoEseguito | Esegui dopo che il metodo di comportamento è stato restituito |
I quattro metodi vengono eseguiti nell'ordine OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Gli argomenti dei quattro metodi sopra elencati sono ereditati dalla classe ContollorContext. Ad esempio, un filtro personalizzato è definito di seguito
- 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;
- }
- }
Copia codice
I metodi comportamentali per utilizzarlo sono definiti di seguito - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Copia codice
|