מדריך ASP.NET MVC – הגדרת אילוצים בתוך ה-Routing System
בפרק הקודם שינינו את הגדרות ברירת המחדל של ה-Routing System. ראינו כי פעולה זו היא קלה למדי ודורשת תיקון קל בתוך הפונקציה RegisterRoutes. מצד שני נוכחנו לדעת כי ה-Routing System עלול להשתמש בהגדרות החדשות גם עבור URL שאינם מתאימים (מבחינתנו).
להורדת הקוד של הפרק הקודם לחץ כאן
לדוגמא, ראינו כי ההגדרה: "{Group/{id" תופסת גם עבור ה-URL הבא: http://AddressBook/Group/Create. כדי לפתור את הבעיה אנו יכולים להשתמש באילוצים.
כל הגדרה חדשה ב-Routing System יכולה להכיל רשימה של אילוצים. במידה ואחד האילוצים איננו מתקיים אזי ה-Routing System יתעלם מההגדרה ויעבור לבאה ברשימה.
פתח את הקובץ Global.asax.cs ועדכן את הפונקציה RegisterRoutes באופן הבא:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
null, // Route name
"Group/{id}", // URL with parameters
new { controller = "Group",
action = "Index" }, // Parameter defaults
new { id = @"\d" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Group", action = "Index",
id = UrlParameter.Optional } // Parameter defaults
);
}
שים לב כיצד הקריאה הראשונה לפונקציה MapRoute מקבלת פרמטר רביעי נוסף. פרמטר זה מייצג את רשימת האילוצים עבור ההגדרה. כברירת מחדל ה-Routing System מתייחס לאילוץ כאל ביטוי רגולרי כך שאם הביטוי הרגולרי איננו מתאים לערך המתקבל עבור אותו משתנה בתוך ה-URL אזי ההגדרה איננה תופסת ועוברים להגדרה הבאה ברשימה. בדוגמא שלנו, האילוץ "id = @”\d”" קובע כי הפרמטר id צריך להיות מסוג מספר.
הרץ את התוכנית ובחן כיצד הלינק ה-Create group "עושה את העבודה" ומחזיר את התצוגה המתאימה:
בנוסף לביטויים רגולריים ה-Routing System מגדיר עוד סוגים נוספים של אילוצים והם:
- HttpMethodConstraint – מאפשר לנו לסנן הגדרה עפ"י סוג ה-HTTP Request, כלומר האם הבקשה היא מסוג GET או POST או VERB אחר.
- IRouteConstraint – זהו ממשק כללי בעזרתו אפשר להגדיר סוגי אילוצים חדשים. לדוגמא על מנת להגדיר אילוץ הבוחן את סוג הדפדפן ניתן להגדיר מחלקה חדשה בשם UserAgentConstraint המממשת את הממשק IRouteConstraint ומחליטה על סמך נתוני ה-Request שמגיעים מהדפדפן האם לסנן את ההגדרה ב-Routing System או לא.
בפרק זה למדנו כיצד ניתן להגדיר ביטוי רגולרי שישמש כאילוץ בתוך ה-Routing System. אילוץ אשר איננו מתקיים גורם ל-Routing System להתעלם מהכניסה הרלונטית ברשימה לעבור לבאה בתור.
בפרק הבא אנו נלמד כיצד להרחיב את ההגדרות של ה-Routing System ולהוסיף כניסה מסוג CatchAll אשר יודעת לטפל בכל URL ולא משנה מה צורתו.
תגובות בפייסבוק