|
Jika filter yang diperkenalkan sebelumnya tidak memenuhi persyaratan, filter kustom ini akan berguna jika Anda ingin menentukan logika pemrosesan Anda sendiri sebelum dan sesudah metode perilaku dijalankan dan ditampilkan. Untuk menyesuaikan filter, Anda mewarisi kelas ActionFilterAttribute, yang merupakan kelas abstrak yang mengimplementasikan antarmuka IActionFilter dan IResultFilter, terutama dengan menulis ulang empat metode virtual untuk mencapai logika injeksi sebelum dan sesudah eksekusi dan pengembalian metode perilaku Metode | Parameter | deskripsi | OnActionExecuting | TindakanEksekusiKonteks | Eksekusi sebelum metode perilaku dieksekusi | OnActionExecute | ActionExecutedContext | Eksekusi setelah metode perilaku dijalankan | OnResultExecuting | HasilEksekusiKonteks | Eksekusi sebelum metode perilaku kembali | OnResultExecute | ResultExecutedContext | Eksekusi setelah metode perilaku dikembalikan |
Keempat metode dijalankan dalam urutan OnActionExecuting>OnActionExecuted>OnResultExecuting>OnResultExecuted. Argumen dari empat metode di atas diwarisi dari kelas ContollorContext. Misalnya, filter kustom ditentukan di bawah ini
- 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;
- }
- }
Salin kode
Metode perilaku untuk menggunakannya didefinisikan di bawah ini - [MyCustomerFilter]
- public ActionResult CustomerFilterTest()
- {
- Response.Write("<br/>Invking CustomerFilterTest Action");
- return View();
- }
Salin kode
|