|
Якщо раніше введені фільтри не відповідають вимогам, цей власний фільтр стане в пригоді, якщо ви хочете визначити власну логіку обробки до і після виконання та повернення поведінкового методу. Щоб налаштувати фільтр, ви успадковуєте клас ActionFilterAttribute — абстрактний клас, що реалізує інтерфейси IActionFilter та IResultFilter, головним чином шляхом переписування чотирьох віртуальних методів для досягнення логіки ін'єкції до і після виконання та повернення методу поведінки метод | Параметр | опис | OnActionExecuting | ДіяВиконанняКонтекст | Виконати до виконання поведінкового методу | OnActionExecuted | ActionExecutedContext | Виконати після виконання поведінкового методу | OnResultExecuting | ResultExecutingContext | Виконати до повернення методу поведінки | OnResultExecuted | ResultExecutedContext | Виконуйте після повернення методу поведінки |
Чотири методи виконуються у порядку OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Аргументи наведених вище чотирьох методів успадковані з класу ContollorContext. Наприклад, нижче визначено власний фільтр
- 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;
- }
- }
Копія коду
Поведінкові методи його використання визначені нижче - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Копія коду
|