
Adding a book בפונקציית ההוספה. ספר חוקי מדפיס את ההודעה. ספר עם מחיר מינוס 100 מחזיר שגיאה בלי שההודעה מופיעה, כלומר הקוד לא הגיע לתוך הפונקציה.program, לפני הוספת ה-controllers: כותבים builder.services.configure על המחלקה API Behavior Options, ובתוכה options.SuppressModelStateInvalidFilter = true.Model State Invalid Filter פועל אוטומטית, בודק אם המודל חוקי, ואם לא מחזיר את השגיאות שלו בלי להיכנס ל-route. Suppress אומר לדכא אותו.הטקסט המלא של הדקות הראשונות בהרצאה «מניעת וולידציה אוטומטית» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אוקיי, בשביל להצליח להחזיר הודעת שגיאה משלנו אנחנו צריכים להבין כמה דברים. דבר ראשון, בואו נלך רגע לקונטרולר. ננסה לעשות משהו מעניין. כל מה שננסה לעשות זה כשמוסיפים ספר, נציג הודעה לקונסול Adding a book.
זה כל מה שאני רוצה לעשות. נריץ, ננסה לגשת ל-Postman ולהוסיף ספר, אבל נוסיף ספר שאין איתו בעיה. ספר, אה, עם, אה, נתונים חוקיים לגמרי. בואו נגיד C Programming Language, תיאור, price חוקי Send, והוא אמור להצליח להוסיף את הספר.
בואו נסתכל רגע על הטרמינל, על הקונסול ונראה כאן Adding a book. מעולה! בואו רגע נסגור. נריץ שוב שהתצוגה הקודמת של הקונסול לא תפריע לנו.
go, go, go. והנה אנחנו רואים קונסול חדש ונגדיר פה איזושהי שגיאה. נניח מינוס מאה. ננסה להוסיף.
כמובן שאנחנו נחטוף את השגיאה, אבל מה שמעניין אותי זה האם אנחנו נראה בקונסול את ההודעה, והתשובה לא. זאת אומרת שמשהו קרה לפני הפונקציה ואנחנו בעצם לא נכנסנו בכלל לפונקציה אם הייתה שגיאה.
אז מה קרה כאן? מה ש-dotnet עושה זה אומרת כזה דבר. אם אתם קולשים ל-route ואתם מקבלים אובייקט מה-JSON שנשלח, הרי אתם שלחתם JSON ואנחנו צריכים לקחת את ה-JSON מה-body, from body, ולהפוך אותו לאובייקט book.
אז ברגע שזה עושה, זה קונספט שנקרא data binding, הוא פשוט לוקח את ה, אמ, אובייקט שלנו ו-אה, עושה לו binding ל-book ויוצר ממנו אובייקט ספר. ברגע שזה קורה by default REST API dotnet מה שהיא עושה זה מריצה את שגיאות הוולידציה שהוגדרו כאן.
גם אם הן לא הוגדרו היא מריצה שגיאות משלה. לדוגמה, אם זה string שהוא לא null, אז היא בודקת שבאמת שלחו לי value ולא null ועושה את כל הבדיקות האלה, ובמידה ואחת מהבדיקות נכשלת אז היא מייד עוצרת, לא נכנסת לתוך הפונקציה ומחזירה לנו הודעת שגיאה בתצורה של ה-JSON שקיבלנו פה, ואת זה אנחנו לא רוצים.
אנחנו רוצים למנוע את ה-JSON הזה ולהחזיר הודעה משלנו. אז הדבר הראשון שאנחנו צריכים לעשות זה לומר ל-dotnet לא לבצע את הבדיקה האוטומטית, אלא להיכנס לתוך הפונקציה מבלי לבצע שום בדיקה אוטומטית בעצמה.
את ההגדרה הזאת אנחנו עושים כאן ב-program.