|
Jos aiemmin esitetyt suodattimet eivät täytä vaatimuksia, tämä mukautettu suodatin on hyödyllinen, jos haluat määritellä oman prosessointilogiikkasi ennen ja jälkeen käyttäytymismetodin suorituksen ja palautuksen. Suodattimen muokkaamiseksi perit ActionFilterAttribute-luokan, joka on abstrakti luokka ja toteuttaa IActionFilter- ja IResultFilter-rajapinnat, pääasiassa kirjoittamalla neljä virtuaalista metodia uudelleen injektiologiikan saavuttamiseksi ennen ja jälkeen käyttäytymismetodin suorituksen ja palautuksen menetelmä | parametri | kuvaus | OnActionExecuting | ActionExecutingContext | Suorita ennen käyttäytymismetodin suorittamista | OnActionExecuted | ActionExecutedContext | Suorita käyttäytymismetodin suorituksen jälkeen | OnResultExecuting | ResultExecutingContext | Suorita ennen kuin käyttäytymismetodi palaa | OnResultExecuted | ResultExecutedContext | Suorita käyttäytymismetodin palautuksen jälkeen |
Neljä menetelmää suoritetaan järjestyksessä OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Edellä mainittujen neljän menetelmän argumentit periytyvät ContollorContext-luokasta. Esimerkiksi alla määritellään mukautettu suodatin
- 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;
- }
- }
Kopioi koodi
Käyttäytymismenetelmät sen käyttöön on määritelty alla - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Kopioi koodi
|