מדריך ASP.NET MVC – איך לטפל בכל סוגי ה-URL
להורדת הקוד של הפרק הקודם לחץ כאן
במקרים מסוימים אנו מעוניינים לטפל ב-URL שהתקבל ללא תלות בצורתו. לדוגמא, עבור ספר הכתובות שלנו נחמד יהיה אם ה-URL יוכל לתת ביטוי לתכולה של הספר:
שים לב כיצד ה-URL מתאים למיקום של הפריט בספר הכתובות.
על מנת לאפשר התנהגות שכזו עלינו להוסיף הגדרת CatchAll בתוך ה-Routing System.
פתח את הקובץ Global.asax.cs והוסף את הקוד הבא:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
null, // Route name
"Root/{*itemPath}", // URL with parameters
new { controller = "Book",
action = "IndexByPath" } // Parameter defaults
);
...
}
שים לב להגדרה החדשה: "{Root/{*itemPath". הגדרה זו תופסת לגבי כל URL אשר מתחיל במילה "Root" כאשר לא משנה מה המשך ה-URL. בנוסף, הסיפא של ה-URL מאוכסן בתוך משתנה בשם itemPath.
הוסף Action חדש אשר מטפל בבקשות מסוג מזה. פתח את הקובץ BookController.cs והוסף את הקוד הבא:
public ActionResult IndexByPath(string itemPath)
{
AddressBookDB db = AddressBookDB.Create();
BookItem item = db.GetItemByPath(itemPath);
if (item is Group)
{
Server.TransferRequest(Url.Action("Index", "Group",
new { id = item.ID }));
}
else
{
Server.TransferRequest(Url.Action("Index", "Person",
new { id = item.ID }));
}
return null;
}
שים לב כיצד הפרמטר itemPath המגיע מתוך ה-URL משמש אותנו בשליפה של הפריט המתאים מתוך ספר הכתובות.
הרץ את התוכנית ובחן את ההתנהגות החדשה:
בפרק זה למדנו כיצד ניתן להוסיף הגדרה מיוחדת מסוג Catch All ל-Routing System וע"י כך ליצור תחושה של מערכת תוכן הנחשפת דרך ה-URL.
תגובות בפייסבוק