כיצד ליצור אילוצי מסלול ב- ASP.NET Core

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

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

צור פרויקט Core MVC של ASP.NET ב- 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.

הכיתה RouteCollection בליבת ASP.NET

המחלקה RouteTable ב- ASP.NET Core מכילה מאפיין בשם Routes המאחסן את כל המסלולים כ- RouteCollection. מחלקת RouteCollection מכילה כמה שיטות הרחבה בהן ניתן להשתמש כדי למפות מסלולים או להתעלם מהם.

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

מפת נתיבים סטטית ציבורית Route (מסלול אוסף מסלול זה, שם מחרוזת,

    url מחרוזת, ברירת מחדל של אובייקט, מגבלות אובייקט);

ממשק IRouteConstraint בליבת ASP.NET

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

מרחב שמות Microsoft.AspNetCore.Routing

{

    ממשק ציבורי IRouteConstraint

    {

        התאמת בול (

            HttpContext httpContext,

            מסלול IRouter,

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

            ערכי RouteValueDiction,

            RouteDirection routeDirection);

    }

}

המילון ConstraintMap בליבת ASP.NET

ConstraintMap הוא מילון המכיל רשימה של אילוצי מסלול הממפה את מקשי אילוצי הנתיב ליישומי IRouteConstraint. קטע הקוד המופיע להלן ממחיש כיצד ניתן להוסיף את המגבלות המותאמות אישית למילון זה.

חלל ציבורי ConfigureServices (שירותי ISCollection) 

{  

  services.Configure (routeOptions =>  

  { 

     routeOptions.ConstraintMap.Add ("אילוץ אימייל", typeof (EmailRouteContraint)); 

  }); 

יישם את שיטת ההתאמה IRouteConstraint ב- ASP.NET Core

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

שיטת ההתאמה מקבלת את הפרמטרים הבאים:

  • HttpContext - מקפל את כל המידע הספציפי ל- HTTP על בקשה
  • IRouter - מייצג את הנתב שיחיל את האילוצים
  • RouteKey - מייצג את פרמטר המסלול שמאמת
  • RouteDirection - אנום המכיל שני ערכים, כלומר IncomingRequest ו- UrlGeneration, ומשמש לציון האם כתובת ה- URL עוברת מבקשת HTTP או יצירת URL
  • RouteValues ​​- מכיל את פרמטרי ה- URL

מבנה מגבלת מסלול מותאמת אישית בליבת ASP.NET

הנה דוגמה למבנה של אילוץ מסלול מותאם אישית:

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

    {

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

        מחרוזת routeKey, ערכי RouteValueDiction,

        RouteDirection routeDirection)

        {

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

        }

    }

דוגמה לאילוץ מסלול מותאם אישית ב- ASP.NET Core

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

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

    {

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

        מחרוזת routeKey, ערכי RouteValueDiction,

        RouteDirection routeDirection)

        {

            לחזור אמיתי;

        }

    }

רישום הקוד הבא מציג את מחלקת EmailRouteConstraint עם שיטת ההתאמה המיושמת.

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

    {

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

        מחרוזת routeKey, ערכי RouteValueDiction,

        RouteDirection routeDirection)

        {

            if (values.TryGetValue (routeKey, out var routeValue))

            {

                var parameterValueString = Convert.ToString (routeValue,

                CultureInfo.InvariantCulture);

                להחזיר את IsEmailAddressValid (parameterValueString);

            }

            להחזיר כוזב;

        }

        bool פרטי IsEmailAddressValid (מייל מחרוזת כתובת)

        {

            לחזור אמיתי;

        }

    }

שימו לב לשיטת IsEmailAddressValid כאן פשוט מחזירה "נכון". אני משאיר לך לכתוב את הקוד הדרוש לאימות כתובת הדוא"ל.

רשום אילוץ מסלול מותאם אישית ב- ASP.NET Core

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

חלל ציבורי ConfigureServices (שירותי ISCollection)

      {

          services.AddControllersWithViews ();

          services.Configure (routeOptions =>

          {

              routeOptions.ConstraintMap.Add ("ERC",

              typeof (EmailRouteContraint));

          });

      }

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

app.UseEndpoints (נקודות קצה =>

{

     נקודות קצה. MapControllerRoute (

         שם: "ברירת מחדל",

         אילוצים: {ERC = חדש EmailRouteContraint ()} חדש,

         דפוס: "{controller = Home} / {action = Index} / {id?}");

});

וזה הכל. כעת תוכל לציין את האילוץ בבקר שלך או את שיטות הפעולה שלך ולהתחיל להשתמש ביישום.

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

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

  • כיצד לנהל סודות משתמש בליבת ASP.NET
  • כיצד לבנות יישומי gRPC בליבת ASP.NET
  • כיצד להפנות מחדש בקשה ב- ASP.NET Core
  • כיצד להשתמש בניתוב תכונות ב- ASP.NET Core
  • כיצד להעביר פרמטרים לשיטות פעולה ב- 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