מדריך ASP.NET MVC

מדריך ASP.NET MVC – איך לטפל בכל סוגי ה-URL

‏ • Hi Tech

להורדת הקוד של הפרק הקודם לחץ כאן

במקרים מסוימים אנו מעוניינים לטפל ב-URL שהתקבל ללא תלות בצורתו. לדוגמא, עבור ספר הכתובות שלנו נחמד יהיה אם ה-URL יוכל לתת ביטוי לתכולה של הספר:

image

שים לב כיצד ה-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 משמש אותנו בשליפה של הפריט המתאים מתוך ספר הכתובות.

הרץ את התוכנית ובחן את ההתנהגות החדשה:

image

 

בפרק זה למדנו כיצד ניתן להוסיף הגדרה מיוחדת מסוג Catch All ל-Routing System וע"י כך ליצור תחושה של מערכת תוכן הנחשפת דרך ה-URL.

תגיות: , , , ,

תגובות בפייסבוק