PracticU

יצירת Pass-Through Middleware

בלי כתוביותעם כתוביות
PracticU › קורס דוט-נט - NET Core. - עם Rest API › יצירת Pass-Through Middleware
יצירת Pass-Through Middleware
ההרצאה בונה Middleware מסוג Pass-Through שסופר כמה בקשות הגיעו לאפליקציה, ורושם אותו ב-Program.
השלבים העיקריים
1. המחלקה: בתיקיית Middleware מוסיפים class בשם RequestCounterMiddleware. השם Middleware משמש גם ליחיד וגם לרבים.
2. שדות: משתנה פרטי readonly מסוג RequestDelegate בשם next, שמאפשר להמשיך את הזרימה לפונקציה הבאה (Middleware, פילטר או אקשן), ומונה פרטי _counter שמאופס.
3. קונסטרקטור: מקבל RequestDelegate next, שהמערכת מספקת, ושומר אותו בשדה.
4. פונקציית Invoke: מחזירה Task ומקבלת HttpContext, שמכיל מידע על הבקשה, כמו כתובת ה-IP. מגדילים את המונה, מציגים אותו ב-Console.Title ("Total requests") וקוראים ל-next(context) כדי להמשיך. בלי הקריאה ל-next שום דבר לא ימשיך הלאה.
5. רישום: המחלקה לא פעילה עד שרושמים אותה. ב-Program, ברמת ה-app, מוסיפים app.UseMiddleware<RequestCounterMiddleware>().
6. בדיקה: מריצים עם Ctrl+F5 ושולחים בקשות מ-Postman. כותרת הקונסול עולה בכל בקשה, גם לספר בודד, בלי קוד בכל אקשן, כי ה-Middleware פועל ברמת כל האפליקציה.
7. קוד בדרך חזרה: כדי לכתוב קוד גם אחרי שהתשובה חוזרת, לא עושים return, אלא await next(context), ואז כותבים קוד נוסף. הפונקציה צריכה להיות async. התשובה חוזרת דרך אותו Middleware.
8. למה Task ו-async/await: כך ההמתנה לא תוקעת את שאר האפליקציה. המרצה ממליץ לחזור על החומר הזה מהקורס המתקדם.
שימו לב
- ברוב המקרים מספיק לבצע פעולה ולשחרר את הבקשה, או לבצע פעולה ולהחזיר תשובה. הקוד בדרך חזרה הוא נדיר.
- אחרי return אי אפשר לכתוב קוד נוסף בפונקציה.
אפשר עכשיו לכתוב Middleware מסוג Pass-Through ולרשום אותו ב-Program.
השיעור הבא בקורס: יצירת Short-Circuit Middleware

פרקי ההרצאה: יצירת Pass-Through Middleware

  1. 00:00

    בניית Request Counter Middleware

  2. 00:44

    הגדרת ה-Request Delegate

  3. 01:57

    פונקציית ה-Invoke

  4. 02:57

    רישום ה-Middleware ב-Program

  5. 03:36

    בדיקה ב-Postman

  6. 04:51

    הקונספט של Task

  7. 05:49

    שימוש ב-await במקום return

תמלול ההרצאה: יצירת Pass-Through Middleware

הטקסט המלא של הדקות הראשונות בהרצאה «יצירת Pass-Through Middleware» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אז אנחנו הולכים לראות קודם כל Pass-Through Middleware. בואו נבנה. ניכנס רגע לתיקיית Middleware שיש לנו בפרויקט. בקש ימני, Add Class, ובואו נבנה Middleware שפשוט סופר כמה ריקווסטים היו.

  2. 00:21

    בואו נקרא לו Request Counter Middleware. מזכיר לכם שהשם Middleware זה גם רבים וגם יחיד, אין Middlewares. מידלוור בודד שמדבר גם על יחיד וגם על רביד. הנה יש לנו קלאס מעולה ומה שאנחנו רוצים לעשות זה לבנות קודם כל private read only איזה שהוא משתנה מסוג request delegate.

  3. 00:49

    request delegate אני קורא לו next זה בעצם delegate הכוונה אפשרות לקרוא לפונקציה שבעזרת הדלגייט הזה אנחנו בעצם ממשיכים את הפלואו לפונקציה הבאה, למידלווייר הבא או לאקשן.

  4. 01:08

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

  5. 01:30

    אנחנו רוצים איזשהו קונסטרקטור, סיטור, שמקבל את אותו request delegate next. המערכת הולכת לתת לנו את אותה פונקציה שבעזרתה אנחנו ממשיכים את ה-flow, ואנחנו שמים אותה במשתנה הפרטי למעלה, ככה אנחנו בונים middleware.

  6. 01:50

    כעת אנחנו רוצים פונקציה שמחזירה task, מטלה, והיא נקראת invoke. פונקציה מקבלת http context נקרא לו context שמכיל מידע לגבי ה-request הנוכחי אם אני רוצה לדעת אולי מה ה-IP address של המשתמש כל מיני נתונים לגבי ה-request הנוכחי ומה שאנחנו רוצים לעשות זה לבצע את הלוגיקה שלנו והלוגיקה שלנו היא מאוד פשוטה counter++

  7. 02:20

    כי אני סופר כמה פעמים גולשים אליי לאתר בואו נציג איזושהי הודעה לדוגמה בשביל לא להפריע יותר מדי לקונסול נציג את זה בטייטל שלו. קונסול נקודה טייטל שווה total quests לשרשר את counter ואנחנו צריכים to return את אותה פונקציה next שתקבל את הקונטקסט בכדי להמשיך את הזרימה הלאה.

  8. 02:48

    אם אנחנו מריצים את זה אנחנו יכולים לראות שבקונסול שיפתח זה יעלה בכל בקשה שנבצע. עכשיו, זה שבנינו מחלקה לא אומר שמישהו ישתמש איתה, אנחנו צריכים כרגע לרשום אותה. איך אנחנו רושמים מידלווייר בפרוגרם?

  9. 03:07

    אנחנו נכנסים לפרוגרם, וזה מתבצע ברמת האפ. הנה האפ, איך שאנחנו יוצרים את האפ. אנחנו אומרים לו use middleware, ונותנים לו את סוג הנתונים שהיה request counter middleware בצורה כזאת.

  10. 03:25

    ועכשיו המידלווייר שלנו רשום במערכת, ובכל ריקווסט הוא יתבצע. בואו נבדוק. נבצע קונטרול F5, נריץ את המערכת, הנה אנחנו רואים שהמערכת רצה, ותסתכלו על הטייטל, עדיין אין פה שום דבר.

  11. 03:41

    בואו נפנה לפוסטמן ונגיד לפוסטמן שאנחנו רוצים להתחיל לגלוש. בואו ניגש לכאן ונגיד תביא לי את כל הספרים. נשים את זה אולי סייד ביי סייד, נשים את זה פה ואת זה פה, ופשוט נבצע גלישות go והנה אנחנו רואים תביא לי את כל הספרים הכל בסדר ופה למעלה total request one תביא לי את כל הספרים total request וכל פעם

  12. 04:11

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

  13. 04:34

    אני מבקש ללכת ולקבל ספר בודד, אוקיי, בבקשה. הנה אנחנו רואים, עלינו ל-6, עלינו ל-7. המידלווייר מופעל ברמת כלל האפליקציה. בואו נסגור, נחזור בחזרה. מה שבעצם קרה כאן, הפונקציה הזאת התבצעה, או העלתה את הקאונטר ב-1, הציגה איזה משהו והחזירה בחזרה למי שקרא למידלווייר

  14. 04:57

    את האפשרות להמשיך הלאה ולגלוש למידלוויר הבא. ויש לנו פה את הקונספט הזה שנקרא Task, שזה כאילו מטלה שאפשר לבצע תוך כדי מטלות אחרות.

  15. 05:13

    זה כבר שייך לתחום של Advanced C-Sharp שלמדנו בעבר באחד הקורסים, אבל בגדול משפט או שתיים זה פשוט מאפשר לבצע את המידלוויר הזה ביחד עם שאר המידלוויר ושאר התהליכים שיש במערכת ולהמתין עד שהוא יגלוש בחזרה ואז רק המערכת יכולה להמשיך.

  16. 05:38

    ולכן יש לנו פה צורך להמתין מבלי לתקוע את המערכת. זאת הסיבה שיש לנו פה task. אם אנחנו רוצים לבצע פעולה גם אחרי שאנחנו חוזרים בחזרה אז אנחנו יכולים לבצע קוד קצת שונה.

  17. 05:54

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

ההרצאה הקודמת: הבנה של Middleware - Filters

ההרצאה הבאה: יצירת Short-Circuit Middleware

הרצאות קשורות מקורסים אחרים

  • רידקס - יצירת Middleware
  • Express Middleware
  • התקפת Pass-The-Ticket - חלק 1
  • הסבר על Pass Params ב-Flutter

קורסים נוספים במסלול

  • קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט
  • קורס ASP.NET
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio