|
Daha önce tanıtılan filtreler gereksinimleri karşılamazsa, bu özel filtre davranış yöntemi çalıştırılıp döndürülmeden önce ve sonra kendi işlem mantığınızı tanımlamak istiyorsanız işe yarayacaktır. Bir filtreyi özelleştirmek için, IActionFilter ve IResultFilter arayüzlerini uygulayan soyut bir sınıf olan ActionFilterAttribute sınıfını devralırsınız; bu sınıf, özellikle davranış metodunun yürütülmesi ve dönüşünden önce ve sonra enjeksiyon mantığı elde etmek için dört sanal yöntemi yeniden yazarak yöntem | parametre | Açıklama | OnActionExecuting | ActionExecutingContext | Davranışsal yöntem yürütülmeden önce çalıştırın | OnActionExecuted | ActionExecutedContext | Davranışsal yöntem yürütüldükten sonra çalıştır | OnResultExecuting | ResultExecutingContext | Davranış metodu dönmeden önce çalıştır | OnResultExecuted | ResultExecutedContext | Davranış yöntemi geri döndükten sonra çalıştır |
Dört yöntem, OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecutedOnResultExecuted sırasında yürütülür. Yukarıdaki dört yöntemin argümanları ContollorContext sınıfından miras alınmıştır. Örneğin, aşağıda özel bir filtre tanımlanmıştır
- 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;
- }
- }
Kopya kodu
Kullanımı için davranışsal yöntemler aşağıda tanımlanmıştır - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Kopya kodu
|