DCSIMG
Ordering Filter Execution in ASP.NET MVC - I Love C#
Sign in | Join | Help

I Love C#

Eyal Vardi

Ordering Filter Execution in ASP.NET MVC

פורסם בתאריך Oct 08 2011, 09:44 PM על ידי Vardi | ישנם 0 תגובות

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

1.     יש 4 סוגים של פילטרים ע"פ הציור הבא.

clip_image002

תמונה 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.

clip_image004

תמונה 2 – מצב הפיטרים ע"פ Scope ו- Order.
תוצאה:


clip_image005

הסדר נקבע קודם ע"י ה-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. תוצאה:


clip_image007

התור השמאלי מציין את המתודה 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. תוצאה:

clip_image009

הסדר הפוך מתרחיש 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 , ואיך אפשר להרחיב את התשתית לעזרתינו.

רשימת תגובות

אין תגובות

שלח תגובה

(שדה חובה) 
(שדה חובה) 
(אופציונלי)
(שדה חובה) 

Enter the numbers above: