יש הרבה בילבול בסדר שמובצעים הפילטרים, למרות שיש על זה לא מעט תיעוד. לכן החלטתי להפוך את ההסבר למשהוא ויזואלי.
1. יש 4 סוגים של פילטרים ע"פ הציור הבא.

תמונה 1
עד כאן זה פשוט, ומה עושה כל ממשק יש על זה מספיק הסברים בלינק הבא. כמו שרואים מהתמונה הפעולות של הממשקים מתחילים משמאל לימין (מ- Authorization עד ל- Exception).
2. אפשר שפילטר יהיה מספר פעמים על מתודה או מספר פילטרים שונים יכולים להיות על מתודה, מחלקה או כללים. איך נקבע הסדר ביצוע?
3. הסדר נקבע ע"י מספר פרמטרים Order ו- Scope, בכל תחנה.
4. יש 5 סוגים של Scopes :
a. First – יהיה ראשון בכל תחנה.
b. Global – כאשר רושמים את הפילטר ע"י GolbalFilters.
c. Controller - פילטרים ששיכים למחלקה.
d. Action – פילטרים ששיכים לפעולה / מתודה.
e. Last – יהיה אחרון בכל תחנה.
5. Order – כל פילטר בנוסף ל-Scope יכול להיות לו מספר שעל פיו הוא יסודר בתחנה שלו בתחשבות ל-Scope גם. פה נופילם כולם אז בוא נרא ציור.
6. תרחיש 1 – כל הפילטרים בתמונה ממשים את הממשק IAuthorizationFilter.

תמונה 2 – מצב הפיטרים ע"פ Scope ו- Order.
תוצאה:
|  | הסדר נקבע קודם ע"י ה-Scope ואחרי זה ע"י ה- Order.
| No. | Scope | Order | | 1 | First | I | | 2 | Global | I | | 3 | Controller | I | | 4 | Action | I | | 5 | Last | I | | 6 | First | II | | 7 | Global | II | | 8 | Controller | II | | 9 | Action | II | | 10 | Last | II | |
7. תרחיש 2 – כל הפילטרים בתמונה ממשים את הממשק IActionFilter. מצב הפיטרים ע"פ Scope ו- Order כמו בתמונה 2. תוצאה:
|  | התור השמאלי מציין את המתודה OnActionExecuting ן התור הימני מציין את OnActionExecuted. בתור השמאלי הסדר נקבע קודם ע"י ה-Scope ואחרי זה ע"י ה- Order. שימו לב גם שקודם רץ ה-Scope הראשון (First), רץ רק הפילטר הראשון ( Order 1 ) ואחרי זה ה- Scope השני (Global)... עד שמגעים שוב ל- Scope הראשון (First) ואז רץ הפילטר השני וחוזר חלילה. התור הימני פשוט בסדר הפוך מהשמאלי.
|
8. תרחיש 3 – כל הפילטרים בתמונה ממשים את הממשק IResultFilter. מצב הפיטרים ע"פ Scope ו- Order כמו בתמונה 2. תוצאה כמו סעיף 7.
9. תרחיש 4 – כל הפילטרים בתמונה ממשים את הממשק IExceptionFilter. מצב הפיטרים ע"פ Scope ו- Order כמו בתמונה 2. תוצאה:
|  | הסדר הפוך מתרחיש 1. כלומר ה-Scope הראשון זה Last עם Order 2. | No. | Scope | Order | | 1 | Last | II | | 2 | Action | II | | 3 | Controller | II | | 4 | Global | II | | 5 | First | II | | 6 | Last | I | | 7 | Action | I | | 8 | Controller | I | | 9 | Global | I | | 10 | First | I | |
מקווה שעשיתי את הדברים קצת יותר ברורים J. מחר ה-9 לאקטובר בשעה 17:30 במיקרוסופט אני מעביר הרצאה על איך עובד ה-ASP.NET MVC , ואיך אפשר להרחיב את התשתית לעזרתינו.