
api/countries/{code} מגדיר פרמטר בתוך סוגריים מסולסלים - כל מה שהמשתמש ישלח במקום זה (למשל IL או ABC) ייקלט כערך הפרמטר. שימוש בשני נתיבים זהים (api/countries פעמיים) יוצר שגיאת Ambiguous route, ולכן חייבים לבדל את הנתיבים.HttpContext, שמייצג את הבקשה (Request) והתשובה (Response) הנוכחיות. גישה ל-request.RouteValues (אוסף מסוג Dictionary) מאפשרת לשלוף את ערך הפרמטר לפי השם שהוגדר בנתיב, ולהמיר אותו ל-string.!) כדי לציין ל-C# שבנקודה הזו בוודאות אין null - אך אפשר גם לכבות את הבדיקה כולה ברמת הפרויקט (לא מומלץ) או להשאיר ? כשבאמת יכול להיות null.SingleOrDefault על אוסף המדינות ועם lambda expression שמשווה את הקוד, מוצאים מדינה בודדת לפי הקוד שהתקבל, או מקבלים null אם לא נמצאה כזו.ToLower).? ו-! נקודתיים) ולא לכבות באופן גורף את ההגנה מפני null ברמת הפרויקט.הטקסט המלא של הדקות הראשונות בהרצאה «החזרת אובייקט ב-JSON» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר הבא שאנחנו רוצים להחזיר זה country אחת. נורים שלכל country יש גם name וגם code כמובן. בדרך כלל אמרנו שאם אנחנו רוצים להביא נתון בודד זה יהיה לפי code.
אז בואו נעשה את זה, בואו נגיד שאם מישהו שולח אליי code, אז אני מחזיר לו את האובייקט עצמו וכך הוא יכול לראות גם את הname וגם את הקוד של אותה country.
אולי בהמשך יענו עוד מאפיינים. מה פופיוליישן, מה עיר הבירה, whatever, כאן אנחנו רוצים שיהיה לנו API slash countries, ואם אנחנו שולחים לדוגמה IL, אז שהוא יביא לי את האובייקט, בלבד לא מערך, אובייקט בודד, שמתאר את המדינה, שזה הקוד שלה, שזה כמובן ישראל.
אז אני כרגע לוחץ Enter, ומן הסתם הוא אומר לי, מה אתה רוצה ממני? אין לי בכלל ראוט כזה, הוא צודק לגמרי. בואו נשכפל את זה לעוד אחד. דבר ראשון, כבר אני רואה שיש לי פה איזה warning, יש לי פה שני ראוטים אותו הדבר, וזה כמובן משהו שאסור, אם אנחנו נריץ, בואו נראה מה הוא אומר לנו,
הנה,.NET קורסת, אומרת לנו תקשיב, יש פה ambiguous, ambiguous זה דו משמעות, של API countries, אתה אסור לך שיהיה דבר כזה, וכמובן זה לא הגיוני, לאן בדיוק המערכת אמורה להיכנס.
אז בואו נטפל. אני רוצה לשים פה משהו אחר. אבל אני רוצה לשים קוד, אני לא רוצה שיהיה כתוב פה IL בצורה כזאת או כזאת, אני רוצה שלא משנה מה שהמשתמש ישלח כאן, לא משנה ABC, שיכנס לפה, זה נקרא Route Parameter, ואומר כל דבר שהוא שם קוד שמספר לא משנה נכנס לפה.
אז אנחנו פשוט עושים את זה על ידי מסולסליים, ונותנים בתוך המסוסליות השם, של הפרמטר שאחר כך אנחנו משתמשים איתו בשביל לחלץ את המידע. אז אני כמובן אקרא לזה Code, כי זה הקוד של המדינה.
אם אנחנו נבצע רגע בשביל לראות שני ביניהם, נבצע רגע החזרה של Testing Code Route, רק בשביל לראות את ההבדלים. כמטור אולף חמש, אוקיי, הנה הוא רץ.
אז כשאנחנו גולשים ל-API Countries, הנה אנחנו מקבלים את הראוט הזה עם כל המדינות, ובואו נגלוש ל-slash abc, Enter, והנה אנחנו רואים שהגענו לראוט השני, לפונקציה השנייה.
הדבר הראשון שאני רוצה לבצע בפונקציה זה, לקבל את ה-value הזה, שנשלח לקוד, אז אנחנו רוצים פה לפתוח איזה שהוא משתנה, ולהכניס אליו את המשתנה הזה.
אז זה לא באמת, משתנה שאני יכול סתם ככה לגשת אליו בצורה ישירה, אנחנו צריכים לגשת אליו על ידי אובייקט שמייצג את ה-HTTP Request.
הראות פרמטר נמצא ב-HTTP Request, כאן ברשימת הפרמטרים שנשלחו לראות, זה אומר שאנחנו קטעים עכשיו טיפה לשנות את הפונקציה הזאת.
הפונקציה יכולה לקבל אובייקט מסוג HTTP Context. HTTP Context זה בעצם אובייקט שמייצג את ה-HTTP Request. ריקווסט וריספונס הנוכחיים שמתבצעים כרגע.
אם אני פונה ל-http context. אני רואה שיש לי ריקווסט וריספונס זה שני אובייקטים שמייצגים את התקשורת של הריקווסט ושל הריספונס הריקווסט כבר התבצע והריספונס עדיין לא התבצע בגלל שאנחנו כרגע נמצאים בדיוק בפונקציה בתוך הרסט API.
אם הפונקציה הזאת מתחילה להתבצע, כבר היה ריקווסט אבל עדיין עוד לא היה ריספונס הריספונס יהיה אחרי הריטר אז אני פונה ל-request ופונה ל-route values, שזה collection, והוא אומר לי, תגיד, איזה משתנה יש בתוך ה-collection?
זה משתנה כזה של dictionary, dictionary זה key value collection, הוא אומר לי, תן לי פה את ה-key, זה יהיה קוד, ואני אחזיר לך את ה-value שלו.
בואו נראה מה הוא אומר לי, הוא מחזיר לי אובייקט. כי מבחינתו הוא לא יודע מה באמת הסוג. אני יודע שהסוג זה string. אז אני בעצם יכול להגיד לו, תקשיב, בוא תמיר לי אותו ל-string.
וזה בעצם אמור להוציא לנו את אותו קוד שנכנס כאן. תדע, השם של המשתנה הזה לא חייב להיות אותו השם של המשתנה הזה, אז אולי בשביל שלא יבלבל אותנו בוא נקרא לזה country code.
השם הזה כן חייב להיות אותו הדבר כמו השם הזה. בואו נציג על הקונסול את ה-country. קורד, ונראה אם כל הסיפור הזה בינתיים עושה את העבודה.
כנתור אולף 5, go יופי, נשים רגע את זה פה, נשים את זה פה, נגדיר כאן שאנחנו רוצים לשלוח ABC. אז הנה אני רואה קיבלתי טסטינג, והנה אני רואה פה בקטן כזה את ה-ABC שהתקבל.
בואו נשלח פה משהו אחר, 1, 2, 3, go. הנה אנחנו רואים שאנחנו מקבלים את אותו פרמטר ששולחים. הנה, hello, go, בבקשה, קיבלנו hello. route parameter, אם אני אביא לו.
עוד משהו פה, hello slash bye, בי בצורה כזאת, אז כמובן הוא יגיד לי שאין שום ראוט כזה, נראה ש-slash מייצג, עוד חלק בראוט, ואין לי ראוט שמקבל בדיוק פרמטר פה, ואז את המילה בי, שני פרמטרים, אז כמובן שיש לנו רק את האפשרות הזאת, API countries, ואז כל value
שאני רוצה, מעולה, אנחנו רוצים בעזרת ה... הקוד הזה לגשת ולהביא את האובייקט של המדינה, ולהחזיר את האובייקט של המדינה. בואו קודם כל לטפל ב-Warnings האלה. אני אישית לא אוהב לראות Warnings, ואנחנו צריכים להבין למה יש Warnings, ואיך לטפל ב-Warnings.
אז למה יש Warnings? זה בגלל נלים. אפשר לראות את זה כאן. ה-Request is not null here. בואו נראה מה בעצם הוא אומר לנו. הוא אומר לנו, תקשיבו, כל הסיפור הזה יכול להיות נל, אבל, אסור לכם להכניס