כיצד להשתמש בניתוב תכונות ב- ASP.NET Core

תוכנת התווך לניתוב ב- ASP.NET Core מיומנת במיפוי בקשות נכנסות למטפלים המתאימים. ניתן להגדיר ניתוב ב- ASP.NET Core בשתי דרכים שונות: ניתוב מבוסס תכונות וניתוב מבוסס כנסים.

בניגוד לניתוב מבוסס קונבנציה, שבו פרטי הניתוב מוגדרים במקום אחד, ניתוב תכונות מאפשר לך ליישם ניתוב על ידי קישוט שיטות הפעולה שלך בתכונות. מאמר זה מציג דיון כיצד אנו יכולים לעבוד עם ניתוב מבוסס תכונות ב- ASP.NET Core MVC.

כדי לעבוד עם דוגמאות הקוד המופיעות במאמר זה, עליך להתקין במערכת Visual Studio 2019 שלך. אם עדיין אין לך עותק, תוכל להוריד את Visual Studio 2019 כאן. 

צור פרויקט ASP.NET Core 3.1 MVC ב- Visual Studio 2019

ראשית, בואו ניצור פרוייקט ASP.NET Core ב- Visual Studio 2019. בהנחה ש- Visual Studio 2019 מותקן במערכת שלכם, עקבו אחר השלבים המתוארים להלן כדי ליצור פרויקט ASP.NET Core חדש ב- Visual Studio.

  1. הפעל את Visual Studio IDE.
  2. לחץ על "צור פרויקט חדש".
  3. בחלון "צור פרויקט חדש" בחר "ASP.NET יישום אינטרנט ליבה" מרשימת התבניות המוצגות.
  4. הקש "הבא.
  5. בחלון "הגדר את הפרויקט החדש שלך", ציין את השם והמיקום של הפרויקט החדש.
  6. סמן אופציונלי את תיבת הסימון "הצב פתרון ופרויקט באותה ספרייה", בהתאם להעדפותיך.
  7. לחץ על צור.
  8. בחלון "צור יישום אינטרנט חדש של ASP.NET Core" שמוצג הבא, בחר .NET Core בתור זמן הריצה ו- ASP.NET Core 3.1 (או מאוחר יותר) מהרשימה הנפתחת בחלק העליון.
  9. בחר "יישום אינטרנט (Model-View-Controller)" כתבנית הפרויקט ליצירת יישום MVC Core חדש של ASP.NET. 
  10. ודא שתיבות הסימון "אפשר תמיכה ב- Docker" ו- "הגדר עבור HTTPS" אינן מסומנות מכיוון שלא נשתמש בתכונות אלה כאן.
  11. ודא שהאימות מוגדר כ"לא אימות "מכיוון שלא נשתמש גם באימות.
  12. לחץ על צור.

בעקבות השלבים הבאים ייצור פרויקט MVC Core חדש של ASP.NET ב- Visual Studio 2019. נשתמש בפרויקט זה בחלקים הבאים להמחשה כיצד נוכל לעבוד עם ניתוב תכונות ב- ASP.NET Core 3.1.

צור מחלקת בקר ב- ASP.NET Core MVC

צור בקר חדש בשם DefaultController והחלף את קוד המקור המוגדר כברירת מחדל של DefaultController בקוד הבא:

    מחלקה ציבורית DefaultController: בקר

    {

        [מַסלוּל("")]

        [מסלול ("ברירת מחדל")]

        [מסלול ("ברירת מחדל / אינדקס")]

        אינדקס ActionResult ציבורי ()

        {

            להחזיר EmptyResult חדש ();

        }

        [מסלול ("ברירת מחדל / GetRecordsById / {id}")]

        ActionResult ציבורי GetRecordsById (מזהה int)

        {

            מחרוזת str = string.Format

            ("המזהה שהועבר כפרמטר הוא: {0}", מזהה);

            להחזיר Ok (str);

        }

    }

השתמש בניתוב תכונות ברמת הבקר ב- Core ASP.NET

ניתן להשתמש בניתוב תכונות הן ברמת הבקר והן בשיטת הפעולה. אם אנו מיישמים את תכונת המסלול ברמת הבקר, המסלול חל על כל שיטות הפעולה של אותו בקר.

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

[מסלול ("ברירת מחדל")]   

מחלקה ציבורית DefaultController: בקר

{

  [מַסלוּל("")]

  [מסלול ("אינדקס")]

  אינדקס ActionResult ציבורי ()

  {

      להחזיר EmptyResult חדש ();

   }

  [HttpGet]

  מסלול ("ברירת מחדל / GetRecordsById / {id}")]

  ActionResult ציבורי GetRecordsById (מזהה int)

  {

      string str = string.Format ("המזהה שהועבר כפרמטר הוא: {0}", id);

      להחזיר Ok (str);

   }

}

בעת שימוש בתכונות מסלול הן בבקר והן ברמת שיטת הפעולה, תבנית המסלול המיושמת ברמת הבקר מוכנה לתבנית המסלול שצוינה ברמת שיטת הפעולה.

לעתים קרובות ייתכן שתזדקק לקידומת נפוצה עבור הבקר שלך. כשתעשה זאת, עליך להשתמש במאפיין [RoutePrefix] כפי שמוצג בקטע הקוד המופיע למטה.

[RoutePrefix ("שירותים")]

מחלקה ציבורית HomeController: בקר

{

   // שיטות פעולה

}

השתמש בניתוב תכונות ברמת שיטת הפעולה ב- Core ASP.NET

עיין במחלקת DefaultController המוצגת לעיל. כפי שאתה יכול לראות, ציינו שלושה מסלולים בשיטת האינדקס של מחלקת DefaultController. זה מרמז על כך שכל אחת מכתובות האתר הבאות תפעיל את שיטת הפעולה Index () של DefaultController.

// localhost: 11277

// localhost: 11277 / בית

// localhost: 11277 / home / index

כמו בניתוב מבוסס מוסכמות, ניתן לציין פרמטרים גם בניתוב מבוסס תכונות. במילים אחרות, ניתוב מבוסס תכונות מאפשר לך לציין תכונות מסלול עם פרמטרים. שיטת הפעולה GetRecordsById של מחלקת DefaultController שהוצגה קודם לכן היא דוגמה.

שים לב ש- "{id}" במסלול שצוין מייצג פרמטר או בעל מקום. הפרמטר id בדוגמה זו יכול להיות כל דבר, כגון מחרוזת או מספר שלם. מה אם תרצה להגביל את הפרמטר למספרים שלמים בלבד? אתה יכול להשיג זאת באמצעות אילוצים.

השתמש באילוצי מסלול תכונה בשיטת פעולה

מגבלות מסלול משמשות לסיכול בקשות לא חוקיות לפעולות בקר. לדוגמה, ייתכן שתרצה להבטיח שהפרמטר המועבר לשיטת פעולה הוא תמיד מספר שלם. התחביר של שימוש באילוצי מסלול הוא {parameter: constraint}. קטע הקוד הבא ממחיש זאת. שימו לב שפרמטר id כאן תמיד הוא מספר שלם.

[מסלול ("ברירת מחדל / GetRecordsById / {id: int}")]

ActionResult ציבורי GetRecordsById (מזהה int)

{

  string str = string.Format ("המזהה שהועבר כפרמטר הוא: {0}", id);

  להחזיר Ok (str);

}

השתמש בפרמטרים אופציונליים במפרט מסלול התכונה

תוכל להשתמש בפרמטרים אופציונליים גם במפרט המסלול שלך. קטע הקוד הבא מראה כיצד ניתן להשיג זאת. שים לב ששיטת הפעולה במקרה זה תבוצע גם אם הפרמטר id לא יועבר.

[מסלול ("Sales / GetSalesByRegionId / {id?}")]

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

[נתיב ("דף הבית / GetRecordsById / {id: int}")]

ActionResult ציבורי GetRecordsById (מזהה int)

{

   string str = string.Format ("המזהה שהועבר כפרמטר הוא: {0}", id);

   להחזיר Ok (str);

}

כעת תוכל להפעיל את שיטת הפעולה GetRecordsById באמצעות כתובת האתר הבאה:

// localhost: 11277 / home / GetRecordsById / 1

השתמש במגבלות מסלול תכונות מרובות בשיטת פעולה

אפשר גם להחיל אילוצים מרובים על פרמטר. קטע הקוד הבא ממחיש כיצד ניתן להשיג זאת. שים לב שהערך המינימלי של פרמטר id צריך להיות 1, אחרת תוחזר שגיאת 404.

[מסלול ("ברירת מחדל / GetRecordsById / {id: int: דקה (1)}")]

ActionResult ציבורי GetRecordsById (מזהה int)

{

    string str = string.Format ("המזהה שהועבר כפרמטר הוא: {0}", id);

    להחזיר Ok (str);

}

השתמשו בפעלים HTTP במסלולי תכונה בשיטת פעולה

אתה יכול אפילו להשתמש בפעלים HTTP בניתוב תכונות. קטע הקוד הבא מראה כיצד ניתן להשיג זאת.

[HttpGet]

[מסלול ("ברירת מחדל / GetRecordsById / {id: int: דקה (1)}")]

ActionResult ציבורי GetRecordsById (מזהה int)

{

  string str = string.Format ("המזהה שהועבר כפרמטר הוא: {0}", id);

  להחזיר Ok (str);

}

אילוצי מסלול תכונות נפוצים 

הנה רשימה של מגבלות המסלול הנפוצות ביותר ב- ASP.NET Core. 

  • bool - משמש להתאמת ערך בוליאני
  • datetime - משמש להתאמת ערך DateTime
  • עשרוני - משמש להתאמת ערך עשרוני
  • כפול - משמש להתאמת ערך נקודה צפה של 64 סיביות
  • float - משמש להתאמת ערך נקודה צפה של 32 סיביות
  • guid - משמש להתאמת ערך GUID
  • int - משמש להתאמת ערך שלם של 32 סיביות
  • ארוך - משמש להתאמת ערך שלם של 64 סיביות
  • max - משמש להתאמת מספר שלם עם ערך מקסימלי
  • min - משמש להתאמת מספר שלם עם ערך מינימלי
  • minlength - משמש להתאמת מחרוזת באורך מינימלי
  • regex - משמש להתאמה לביטוי רגולרי

צור אילוצי מסלול של תכונות מותאמות אישית 

תוכל גם ליצור אילוצי מסלול מותאמים אישית משלך על ידי יצירת מחלקה המרחיבה את ממשק IRouteConstraint ומיישמת את שיטת ההתאמה כפי שמוצג בקטע הקוד המופיע להלן.

מחלקה ציבורית CustomRouteConstraint: IRouteConstraint

    {

        התאמת bool ציבורית (HttpContext httpContext, מסלול IRouter,

        נתיב מחרוזת מקש,

        ערכי RouteValueDiction, RouteDirection routeDirection)

        {

            לזרוק NotImplementedException חדש ();

        }

    }

השתמש בהחלפת אסימון במסלולי תכונה ברמת הבקר

ניתוב תכונות ב- ASP.NET Core MVC מספק תמיכה בתכונה מעניינת אחרת בשם החלפת אסימונים. אתה יכול להשתמש באסימונים [פעולה], [אזור] ו- [בקר] בבקר שלך, ואסימונים אלה יוחלפו בשמות הפעולה, האזור ובקר בהתאמה. קטע הקוד הבא ממחיש כיצד ניתן להשיג זאת.

[מסלול ("[בקר] / [פעולה]"]]

מחלקה ציבורית HomeController: בקר

{

   פרטי קריאה בלבד ILogger _logger;

   HomeController ציבורי (לוגר לוגר)

   {

       _ לוגר = לוגר;

   }

   אינדקס IActionResult ציבורי ()

   {

       החזר תצוגה ();

   }

   // שיטות פעולה אחרות

}

ניתוב תכונות ב- ASP.NET Core נותן לך שליטה וגמישות רבה יותר על ה- URI ביישום האינטרנט שלך. למרות שניתן להגדיר ניתוב מבוסס קונבנציונליות במיקום אחד, אשר בתורו יכול להיות מיושם על כל הבקרים ביישום שלך, קשה לתמוך בדפוסי URI מסוימים (כגון גרסת API) באמצעות ניתוב מבוסס מוסכמות.

באמצעות ניתוב תכונות, באפשרותך לבטל את שמות הבקר והפעולה מתבנית המסלול. אתה יכול אפילו להשתמש בשילוב של ניתוב מבוסס מוסכמות וניתוב מבוסס תכונות ביישומי ASP.NET Core שלך.

כיצד לעשות יותר בליבת ASP.NET:

  • כיצד להעביר פרמטרים לשיטות פעולה ב- ASP.NET Core MVC
  • כיצד להשתמש במנתחי API בליבת ASP.NET
  • כיצד להשתמש באסימוני נתיבי נתיב בליבת ASP.NET
  • כיצד להשתמש בגרסאות API ב- Core ASP.NET
  • כיצד להשתמש באובייקטים של העברת נתונים ב- ASP.NET Core 3.1
  • כיצד לטפל ב 404 שגיאות ב- ASP.NET Core MVC
  • כיצד להשתמש בהזרקת תלות במסנני פעולה ב- ASP.NET Core 3.1
  • כיצד להשתמש בתבנית האפשרויות ב- ASP.NET Core
  • כיצד להשתמש בניתוב נקודות קצה ב- ASP.NET Core 3.0 MVC
  • כיצד לייצא נתונים ל- Excel ב- ASP.NET Core 3.0
  • כיצד להשתמש ב- LoggerMessage ב- ASP.NET Core 3.0
  • כיצד לשלוח מיילים ב- ASP.NET Core
  • כיצד לתעד נתונים לשרת SQL ב- ASP.NET Core
  • כיצד לתזמן עבודות באמצעות Quartz.NET ב- ASP.NET Core
  • כיצד להחזיר נתונים מממשק ה- API של ASP.NET Core
  • כיצד לעצב נתוני תגובה ב ASP.NET Core
  • כיצד לצרוך ASP.NET Core API API באמצעות RestSharp
  • כיצד לבצע פעולות סינכרון באמצעות Dapper
  • כיצד להשתמש בדגלי תכונה ב- ASP.NET Core
  • כיצד להשתמש במאפיין FromServices ב- ASP.NET Core
  • כיצד לעבוד עם קובצי Cookie ב- ASP.NET Core
  • כיצד לעבוד עם קבצים סטטיים בליבת ASP.NET
  • כיצד להשתמש ב- Middleware לכתיבת כתובות אתרים בליבת ASP.NET
  • כיצד ליישם הגבלת קצב ב- ASP.NET Core
  • כיצד להשתמש בתובנות יישומי תכלת הרקיע בליבת ASP.NET
  • שימוש בתכונות NLog מתקדמות ב- ASP.NET Core
  • כיצד לטפל בשגיאות ב- ASP.NET Web API
  • כיצד ליישם טיפול חריגים גלובלי ב- ASP.NET Core MVC
  • כיצד לטפל בערכי אפס ב- ASP.NET Core MVC
  • גרסאות מתקדמות ב- ASP.NET Core API
  • כיצד לעבוד עם שירותי עובדים ב- ASP.NET Core
  • כיצד להשתמש ב- API להגנה על נתונים בליבת ASP.NET
  • כיצד להשתמש בתוכנת תיווך מותנית ב- ASP.NET Core
  • כיצד לעבוד עם מצב הפעלה ב- ASP.NET Core
  • כיצד לכתוב בקרים יעילים ב- ASP.NET Core