|
Caso os filtros introduzidos anteriormente não atendam aos requisitos, esse filtro personalizado deve ser útil caso você queira definir sua própria lógica de processamento antes e depois da execução e retorno do método de comportamento. Para personalizar um filtro, você herda a classe ActionFilterAttribute, que é uma classe abstrata que implementa as interfaces IActionFilter e IResultFilter, principalmente reescrevendo os quatro métodos virtuais para alcançar a lógica de injeção antes e depois da execução e retorno do método de comportamento método | parâmetro | descrição | OnActionExecuting | AçãoExecutandoContexto | Execute antes que o método comportamental seja executado | OnActionExecuted | AçãoExecutadoContexto | Execute após a execução do método comportamental | OnResultExecuting | ResultadoExecutandoContexto | Execute antes que o método de comportamento retorne | OnResultExecuted | ResultadoExecutadoContexto | Execute após o retorno do método de comportamento |
Os quatro métodos são executados na ordem de OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Os argumentos dos quatro métodos acima são herdados da classe ContollorContext. Por exemplo, um filtro personalizado é definido abaixo
- 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;
- }
- }
Copiar código
Os métodos comportamentais para seu uso são definidos abaixo - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Copiar código
|