|
Σε περίπτωση που τα φίλτρα που παρουσιάστηκαν νωρίτερα δεν πληρούν τις απαιτήσεις, αυτό το προσαρμοσμένο φίλτρο θα σας φανεί χρήσιμο εάν θέλετε να ορίσετε τη δική σας λογική επεξεργασίας πριν και μετά την εκτέλεση και την επιστροφή της μεθόδου συμπεριφοράς. Για να προσαρμόσετε ένα φίλτρο, κληρονομείτε την κλάση ActionFilterAttribute, η οποία είναι μια αφηρημένη κλάση που υλοποιεί τις διεπαφές IActionFilter και IResultFilter, κυρίως ξαναγράφοντας τις τέσσερις εικονικές μεθόδους για την επίτευξη λογικής έγχυσης πριν και μετά την εκτέλεση και την επιστροφή της μεθόδου συμπεριφοράς μέθοδος | παράμετρος | περιγραφή | OnActionΕκτέλεση | ActionExecutingContext | Εκτέλεση πριν από την εκτέλεση της μεθόδου συμπεριφοράς | OnActionExecuted | ActionExecutedContext | Εκτέλεση μετά την εκτέλεση της μεθόδου συμπεριφοράς | OnResultExecution | 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();
- }
Αντιγραφή κώδικα
|