Προγραμματισμός

Πώς να δημιουργήσετε περιορισμούς διαδρομής στο ASP.NET Core

Οι περιορισμοί διαδρομής στο ASP.NET Core χρησιμοποιούνται για το φιλτράρισμα ή τον περιορισμό ανεπιθύμητων δεδομένων από την επίτευξη των ενεργειών του ελεγκτή σας. Για ένα βασικό πρόγραμμα δρομολόγησης στο ASP.NET Core, μπορείτε να ανατρέξετε στο προηγούμενο άρθρο μου σχετικά με τη δρομολόγηση βάσει χαρακτηριστικών σε σχέση με τη δρομολόγηση βάσει συμβάσεων στο ASP.NET Core. Αυτό το άρθρο υπερβαίνει τα βασικά για να εξερευνήσετε τις προηγμένες λειτουργίες χρησιμοποιώντας περιορισμούς διαδρομής.

Για να εργαστείτε με τα παραδείγματα κώδικα που παρέχονται σε αυτό το άρθρο, θα πρέπει να έχετε εγκαταστήσει το Visual Studio 2019 στο σύστημά σας. Εάν δεν έχετε ήδη αντίγραφο, μπορείτε να κατεβάσετε το Visual Studio 2019 εδώ.

Δημιουργήστε ένα έργο ASP.NET Core 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 Core Web Application" από τη λίστα των προτύπων που εμφανίζονται.
  4. Κάντε κλικ στο Επόμενο.
  5. Στο παράθυρο "Διαμόρφωση του νέου έργου", καθορίστε το όνομα και την τοποθεσία για το νέο έργο.
  6. Προαιρετικά επιλέξτε το πλαίσιο ελέγχου "Τοποθετήστε λύση και έργο στον ίδιο κατάλογο", ανάλογα με τις προτιμήσεις σας.
  7. Κάντε κλικ στο Δημιουργία.
  8. Στο παράθυρο "Δημιουργία νέας εφαρμογής Ιστού πυρήνα ASP.NET" που εμφανίζεται στη συνέχεια, επιλέξτε .NET Core ως χρόνο εκτέλεσης και ASP.NET Core 3.1 (ή μεταγενέστερη έκδοση) από την αναπτυσσόμενη λίστα στην κορυφή.
  9. Επιλέξτε "Web Application (Model-View-Controller)" ως πρότυπο έργου για να δημιουργήσετε μια νέα εφαρμογή ASP.NET Core MVC.
  10. Βεβαιωθείτε ότι τα πλαίσια ελέγχου "Ενεργοποίηση υποστήριξης Docker" και "Διαμόρφωση για HTTPS" δεν είναι επιλεγμένα, καθώς δεν θα χρησιμοποιούμε αυτές τις δυνατότητες εδώ.
  11. Βεβαιωθείτε ότι ο Έλεγχος ταυτότητας έχει οριστεί σε "Χωρίς έλεγχο ταυτότητας", καθώς ούτε θα χρησιμοποιούμε έλεγχο ταυτότητας.
  12. Κάντε κλικ στο Δημιουργία.

Ακολουθώντας αυτά τα βήματα θα δημιουργήσουμε ένα νέο έργο ASP.NET Core MVC στο Visual Studio 2019. Θα χρησιμοποιήσουμε αυτό το έργο στις παρακάτω ενότητες για να δείξουμε πώς μπορούμε να χρησιμοποιήσουμε περιορισμούς διαδρομής στο ASP.NET Core 3.1.

Η κλάση RouteCollection στον πυρήνα ASP.NET

Η κλάση RouteTable στο ASP.NET Core περιέχει μια ιδιότητα που ονομάζεται Routes, η οποία αποθηκεύει όλες τις διαδρομές ως RouteCollection. Η κλάση RouteCollection περιέχει ορισμένες μεθόδους επέκτασης που μπορούν να χρησιμοποιηθούν για τη χαρτογράφηση διαδρομών ή την αγνόησή τους.

Το MapRoute είναι μια υπερφορτωμένη μέθοδος που δέχεται περιορισμούς ως παράμετρο. Μπορείτε να το χρησιμοποιήσετε για να περάσετε τον περιορισμό σας στη διαδρομή. Ακολουθεί η δήλωση της μεθόδου MapRoute.

δημόσιος στατικός χάρτης διαδρομής (αυτό το δρομολόγιο RouteCollection, όνομα συμβολοσειράς,

διεύθυνση URL συμβολοσειράς, προεπιλογές αντικειμένων, περιορισμοί αντικειμένων);

Η διεπαφή IRouteConstraint στο ASP.NET Core

Η διεπαφή IRouteConstraint είναι μια σύμβαση που περιέχει τη δήλωση μόνο μιας μεθόδου που ονομάζεται Match. Αυτή η διεπαφή πρέπει να επεκταθεί από μια κλάση και να εφαρμοστεί η μέθοδος Match για να ελέγξει εάν μια συγκεκριμένη παράμετρος URL είναι έγκυρη για έναν περιορισμό. Εδώ είναι πώς ορίζεται η διεπαφή IRouteConstraint:

namespace Microsoft.AspNetCore.Routing

{

δημόσια διεπαφή IRouteConstraint

    {

αγώνα bool (

HttpContext httpContext,

Διαδρομή IRouter,

συμβολοσειρά

Τιμές RouteValueDictionary,

RouteDirection routeDirection);

    }

}

Το λεξικό ConstraintMap στο ASP.NET Core

Το ConstraintMap είναι ένα λεξικό που περιέχει μια λίστα περιορισμών διαδρομής που χαρτογραφεί τα κλειδιά περιορισμού διαδρομής στις εφαρμογές IRouteConstraint. Το απόσπασμα κώδικα που δίνεται παρακάτω δείχνει πώς μπορείτε να προσθέσετε τους προσαρμοσμένους περιορισμούς σας σε αυτό το λεξικό.

public void ConfigureServices (υπηρεσίες IServiceCollection)

{  

υπηρεσίες. Διαμόρφωση (routeOptions =>

  { 

routeOptions.ConstraintMap.Add ("emailconstraint", typeof (EmailRouteContraint));

  }); 

Εφαρμόστε τη μέθοδο IRouteConstraint Match στο ASP.NET Core

Για να δημιουργήσετε έναν προσαρμοσμένο περιορισμό διαδρομής, θα πρέπει να δημιουργήσετε μια κλάση που επεκτείνει τη διεπαφή IRouteConstraint και εφαρμόζει τη μέθοδο Match. Ο περιορισμός μπορεί να χρησιμοποιηθεί για να αποτρέψει ανεπιθύμητα εισερχόμενα αιτήματα και να αποτρέψει την αντιστοίχιση μιας διαδρομής, εκτός εάν ικανοποιείται μια συγκεκριμένη συνθήκη. Για παράδειγμα, ίσως θελήσετε να διασφαλίσετε ότι η παράμετρος που μεταβιβάζεται σε μια μέθοδο δράσης είναι πάντα ακέραιος.

Η μέθοδος Match δέχεται τις ακόλουθες παραμέτρους:

  • HttpContext - ενσωματώνει όλες τις συγκεκριμένες πληροφορίες HTTP σχετικά με ένα αίτημα
  • IRouter - αντιπροσωπεύει το δρομολογητή που θα εφαρμόσει τους περιορισμούς
  • RouteKey - αντιπροσωπεύει την παράμετρο διαδρομής που επικυρώνεται
  • RouteDirection - ένα enum που περιέχει δύο τιμές, δηλαδή το IncomingRequest και το UrlGeneration, και χρησιμοποιείται για να δείξει εάν η διεύθυνση URL υποβάλλεται σε επεξεργασία από το αίτημα HTTP ή δημιουργεί μια διεύθυνση URL
  • RouteValues ​​- περιέχει τις παραμέτρους URL

Δομή ενός προσαρμοσμένου περιορισμού διαδρομής στον πυρήνα ASP.NET

Ακολουθεί ένα παράδειγμα της δομής ενός προσαρμοσμένου περιορισμού διαδρομής:

δημόσια τάξη CustomRouteConstraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, διαδρομή IRouter,

συμβολοσειρά routeKey, RouteValueDictionary τιμές,

RouteDirection routeDirection)

        {

ρίξτε νέο NotImplementedException ();

        }

    }

Παράδειγμα περιορισμού προσαρμοσμένης διαδρομής στο ASP.NET Core

Ας εφαρμόσουμε τώρα έναν προσαρμοσμένο περιορισμό διαδρομής που μπορεί να ελέγξει για αναγνωριστικά email. Πρώτα απ 'όλα, δημιουργήστε μια κλάση που επεκτείνει τη διεπαφή IRouteConstraint και εφαρμόζει τη μέθοδο Match. Το παρακάτω απόσπασμα κώδικα εμφανίζει μια προσαρμοσμένη κατηγορία περιορισμού διαδρομής με το όνομα EmailRouteContraint που επεκτείνει τη διεπαφή IRouteConstraint.

δημόσια τάξη EmailRouteContraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, διαδρομή IRouter,

συμβολοσειρά routeKey, RouteValueDictionary τιμές,

RouteDirection routeDirection)

        {

επιστροφή αληθινή?

        }

    }

Η ακόλουθη λίστα κωδικών εμφανίζει την κλάση EmailRouteConstraint με την μέθοδο Match.

δημόσια τάξη EmailRouteContraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, διαδρομή IRouter,

συμβολοσειρά routeKey, RouteValueDictionary τιμές,

RouteDirection routeDirection)

        {

εάν (τιμές.TryGetValue (routeKey, out var routeValue))

            {

var parameterValueString = Μετατροπή.ToString (routeValue,

CultureInfo.InvariantCulture);

return IsEmailAddressValid (parameterValueString);

            }

επιστροφή ψευδής?

        }

private bool IsEmailAddressValid (συμβολοσειρά emailAddress)

        {

επιστροφή αληθινή?

        }

    }

Σημειώστε ότι η μέθοδος IsEmailAddressValid εδώ απλώς επιστρέφει "true". Σας αφήνω να γράψετε τον απαραίτητο κωδικό για την επικύρωση της διεύθυνσης email.

Καταχωρήστε έναν προσαρμοσμένο περιορισμό διαδρομής στο ASP.NET Core

Πρέπει να καταχωρίσετε τον περιορισμό της προσαρμοσμένης διαδρομής σας στο σύστημα δρομολόγησης στη μέθοδο ConfigureServices της κλάσης εκκίνησης. Το ακόλουθο απόσπασμα κώδικα το δείχνει αυτό.

public void ConfigureServices (υπηρεσίες IServiceCollection)

      {

υπηρεσίες.AddControllersWithViews ();

υπηρεσίες. Διαμόρφωση (routeOptions =>

          {

routeOptions.ConstraintMap.Add ("ERC",

typeof (EmailRouteContraint));

          });

      }

Θα πρέπει επίσης να διαμορφώσετε τον περιορισμό της προσαρμοσμένης διαδρομής σας στη μέθοδο Διαμόρφωση της κλάσης Εκκίνησης, όπως φαίνεται στο παρακάτω απόσπασμα κώδικα.

app.UseEndpoints (endpoints =>

{

endpoints.MapControllerRoute (

όνομα: "προεπιλογή",

περιορισμοί: νέο {ERC = νέο EmailRouteContraint ()},

μοτίβο: "{controller = Home} / {action = Index} / {id?}");

});

Και αυτό είναι. Τώρα μπορείτε να καθορίσετε τον περιορισμό στον ελεγκτή ή τις μεθόδους δράσης σας και να αρχίσετε να χρησιμοποιείτε την εφαρμογή.

Ο χρόνος εκτέλεσης του ASP.NET Core επικυρώνεται εάν το καθορισμένο μοτίβο και οι περιορισμοί διαδρομής ταιριάζουν με το μοτίβο και τις τιμές του εισερχόμενου αιτήματος. Η λογική επικύρωσης του περιορισμού ορίζεται στη μέθοδο Match του προσαρμοσμένου περιορισμού διαδρομής. Μπορείτε να εκμεταλλευτείτε τους περιορισμούς για να αποφύγετε περιττά αιτήματα, καθώς και να επικυρώσετε τις τιμές διαδρομής προτού το αίτημα περάσει σε μια μέθοδο δράσης.

Πώς να κάνετε περισσότερα στο ASP.NET Core:

  • Πώς να διαχειριστείτε τα μυστικά των χρηστών στο ASP.NET Core
  • Πώς να δημιουργήσετε εφαρμογές gRPC στο ASP.NET Core
  • Πώς να ανακατευθύνετε ένα αίτημα στο ASP.NET Core
  • Τρόπος χρήσης της δρομολόγησης χαρακτηριστικών στο ASP.NET Core
  • Πώς να μεταβιβάσετε παραμέτρους σε μεθόδους δράσης στο ASP.NET Core MVC
  • Τρόπος χρήσης των Αναλυτών API στο ASP.NET Core
  • Τρόπος χρήσης διακριτικών δεδομένων διαδρομής στο ASP.NET Core
  • Πώς να χρησιμοποιήσετε την έκδοση API στο ASP.NET Core
  • Τρόπος χρήσης αντικειμένων μεταφοράς δεδομένων στο 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
  • Πώς να στείλετε email στο ASP.NET Core
  • Τρόπος καταγραφής δεδομένων σε SQL Server στον πυρήνα ASP.NET
  • Πώς να προγραμματίσετε εργασίες χρησιμοποιώντας το Quartz.NET στο ASP.NET Core
  • Πώς να επιστρέψετε δεδομένα από το ASP.NET Core Web API
  • Πώς να μορφοποιήσετε δεδομένα απόκρισης στο ASP.NET Core
  • Πώς να καταναλώσετε ένα ASP.NET Core Web API χρησιμοποιώντας το RestSharp
  • Πώς να εκτελέσετε λειτουργίες ασύγχυσης χρησιμοποιώντας το Dapper
  • Πώς να χρησιμοποιήσετε σημαίες χαρακτηριστικών στο ASP.NET Core
  • Τρόπος χρήσης του χαρακτηριστικού FromServices στο ASP.NET Core
  • Πώς να εργαστείτε με cookie στο ASP.NET Core
  • Πώς να εργαστείτε με στατικά αρχεία στο ASP.NET Core
  • Πώς να χρησιμοποιήσετε το Middle Rewriting URL στο ASP.NET Core
  • Πώς να εφαρμόσετε περιορισμό ρυθμού στο ASP.NET Core
  • Πώς να χρησιμοποιήσετε το Azure Application Insights στο ASP.NET Core
  • Χρήση προηγμένων δυνατοτήτων NLog στο ASP.NET Core
  • Πώς να χειριστείτε σφάλματα στο ASP.NET Web API
  • Πώς να εφαρμόσετε τον παγκόσμιο χειρισμό εξαιρέσεων στο ASP.NET Core MVC
  • Τρόπος χειρισμού μηδενικών τιμών στο ASP.NET Core MVC
  • Προηγμένη έκδοση στο ASP.NET Core Web API
  • Πώς να εργαστείτε με υπηρεσίες εργαζομένων στο ASP.NET Core
  • Τρόπος χρήσης του API προστασίας δεδομένων στο ASP.NET Core
  • Τρόπος χρήσης μεσαίου λογισμικού υπό όρους στο ASP.NET Core
  • Τρόπος εργασίας με την κατάσταση συνεδρίας στον ASP.NET Core
  • Πώς να γράψετε αποτελεσματικούς ελεγκτές στο ASP.NET Core