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

Τρόπος χρήσης της δρομολόγησης χαρακτηριστικών στο ASP.NET Core

Το middleware δρομολόγησης στο 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 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.

Δημιουργήστε μια τάξη ελεγκτή στο ASP.NET Core MVC

Δημιουργήστε έναν νέο ελεγκτή με το όνομα DefaultController και αντικαταστήστε τον προεπιλεγμένο πηγαίο κώδικα του DefaultController με τον ακόλουθο κώδικα:

  δημόσια τάξη DefaultController: Controller

    {

[Διαδρομή("")]

[Διαδρομή ("Προεπιλογή")]

[Διαδρομή ("Προεπιλογή / Ευρετήριο")]

δημόσιο Δείκτης ActionResult ()

        {

επιστροφή νέου EmptyResult ();

        }

[Διαδρομή ("Default / GetRecordsById / {id}")]

δημόσια ActionResult GetRecordsById (int id)

        {

string str = string.Format

("Το αναγνωριστικό που διαβιβάστηκε ως παράμετρος είναι: {0}", id);

επιστροφή Ok (str);

        }

    }

Χρησιμοποιήστε τη δρομολόγηση χαρακτηριστικών σε επίπεδο ελεγκτή στο ASP.NET Core

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

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

[Διαδρομή ("Προεπιλογή")]

δημόσια τάξη DefaultController: Controller

{

[Διαδρομή("")]

[Διαδρομή ("Ευρετήριο")]

δημόσιο Δείκτης ActionResult ()

  {

επιστροφή νέου EmptyResult ();

   }

[HttpGet]

Διαδρομή ("Default / GetRecordsById / {id}")]

δημόσια ActionResult GetRecordsById (int id)

  {

string str = string.Format ("Το αναγνωριστικό που πέρασε ως παράμετρος είναι: {0}", id);

επιστροφή Ok (str);

   }

}

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

Ίσως χρειάζεστε συχνά ένα κοινό πρόθεμα για τον ελεγκτή σας. Όταν το κάνετε, θα πρέπει να χρησιμοποιήσετε το χαρακτηριστικό [RoutePrefix] όπως φαίνεται στο απόσπασμα κώδικα που δίνεται παρακάτω.

[RoutePrefix ("υπηρεσίες")]

δημόσια τάξη HomeController: Controller

{

// Μέθοδοι δράσης

}

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

Ανατρέξτε στην κλάση DefaultController που φαίνεται παραπάνω. Όπως μπορείτε να δείτε, έχουμε καθορίσει τρεις διαδρομές στη μέθοδο ευρετηρίου της κλάσης DefaultController. Αυτό σημαίνει ότι καθένα από τα ακόλουθα URL θα επικαλεστεί τη μέθοδο δράσης Index () του DefaultController.

// localhost: 11277

// localhost: 11277 / σπίτι

// localhost: 11277 / αρχική / ευρετήριο

Όπως και στη δρομολόγηση βάσει συμβάσεων, μπορείτε επίσης να καθορίσετε παραμέτρους στη δρομολόγηση βάσει χαρακτηριστικών. Με άλλα λόγια, η δρομολόγηση βάσει χαρακτηριστικών σάς επιτρέπει να καθορίζετε χαρακτηριστικά διαδρομής με παραμέτρους. Η μέθοδος δράσης GetRecordsById της κλάσης DefaultController που παρουσιάστηκε νωρίτερα είναι ένα παράδειγμα.

Σημειώστε ότι το "{id}" στην καθορισμένη διαδρομή αντιπροσωπεύει μια παράμετρο ή έναν κάτοχο θέσης. Η παράμετρος id σε αυτό το παράδειγμα μπορεί να είναι οτιδήποτε, όπως μια συμβολοσειρά ή ένας ακέραιος. Τι γίνεται αν θέλετε να περιορίσετε την παράμετρο σε ακέραιους αριθμούς; Μπορείτε να το επιτύχετε χρησιμοποιώντας περιορισμούς.

Χρησιμοποιήστε περιορισμούς διαδρομής χαρακτηριστικού σε μια μέθοδο δράσης

Οι περιορισμοί διαδρομής χρησιμοποιούνται για την αποτροπή μη έγκυρων αιτημάτων σε ενέργειες ελεγκτή. Για παράδειγμα, ίσως θελήσετε να διασφαλίσετε ότι η παράμετρος που μεταβιβάζεται σε μια μέθοδο δράσης είναι πάντα ακέραιος. Η σύνταξη της χρήσης περιορισμών διαδρομής είναι {παράμετρος: περιορισμός}. Το ακόλουθο απόσπασμα κώδικα το δείχνει αυτό. Σημειώστε ότι η παράμετρος id εδώ είναι πάντα ακέραιος.

[Διαδρομή ("Default / GetRecordsById / {id: int}")]

δημόσια ActionResult GetRecordsById (int id)

{

string str = string.Format ("Το αναγνωριστικό που διαβιβάστηκε ως παράμετρος είναι: {0}", id);

επιστροφή Ok (str);

}

Χρησιμοποιήστε προαιρετικές παραμέτρους στις προδιαγραφές διαδρομής χαρακτηριστικών

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

[Διαδρομή ("Sales / GetSalesByRegionId / {id?}")]

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

[Διαδρομή ("Home / GetRecordsById / {id: int}")]

δημόσιο ActionResult GetRecordsById (int id)

{

string str = string.Format ("Το αναγνωριστικό που πέρασε ως παράμετρος είναι: {0}", id);

επιστροφή Ok (str);

}

Τώρα μπορείτε να καλέσετε τη μέθοδο δράσης GetRecordsById χρησιμοποιώντας την ακόλουθη διεύθυνση URL:

// localhost: 11277 / home / GetRecordsById / 1

Χρησιμοποιήστε πολλούς περιορισμούς διαδρομής χαρακτηριστικών σε μια μέθοδο δράσης

Είναι επίσης δυνατό να εφαρμοστούν πολλοί περιορισμοί σε μια παράμετρο. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορεί να επιτευχθεί αυτό. Σημειώστε ότι η ελάχιστη τιμή της παραμέτρου id πρέπει να είναι 1, διαφορετικά θα επιστραφεί ένα σφάλμα 404.

[Διαδρομή ("Default / GetRecordsById / {id: int: min (1)}")]

δημόσιο ActionResult GetRecordsById (int id)

{

string str = string.Format ("Το αναγνωριστικό που πέρασε ως παράμετρος είναι: {0}", id);

επιστροφή Ok (str);

}

Χρησιμοποιήστε ρήματα HTTP σε διαδρομές χαρακτηριστικών σε μια μέθοδο δράσης

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

[HttpGet]

[Διαδρομή ("Default / GetRecordsById / {id: int: min (1)}")]

δημόσιο ActionResult GetRecordsById (int id)

{

string str = string.Format ("Το αναγνωριστικό που διαβιβάστηκε ως παράμετρος είναι: {0}", id);

επιστροφή Ok (str);

}

Περιορισμοί διαδρομής χαρακτηριστικών που χρησιμοποιούνται συνήθως

Ακολουθεί μια λίστα με τους πιο συχνά χρησιμοποιούμενους περιορισμούς διαδρομής στο ASP.NET Core.

  • bool - χρησιμοποιείται για να ταιριάζει με μια τιμή Boolean
  • datetime - χρησιμοποιείται για να ταιριάζει με μια τιμή DateTime
  • δεκαδικό - χρησιμοποιείται για να ταιριάζει με μια δεκαδική τιμή
  • διπλό - χρησιμοποιείται για να ταιριάζει με μια τιμή κινητού σημείου 64-bit
  • float - χρησιμοποιείται για να ταιριάζει με τιμή 32-bit floating-point
  • guide - χρησιμοποιείται για να ταιριάζει με μια τιμή GUID
  • int - χρησιμοποιείται για να ταιριάζει με ακέραια τιμή 32-bit
  • long - χρησιμοποιείται για να ταιριάζει με ακέραια τιμή 64-bit
  • max - χρησιμοποιείται για αντιστοίχιση ακέραιου με μέγιστη τιμή
  • min - χρησιμοποιείται για να ταιριάζει με έναν ακέραιο με μια ελάχιστη τιμή
  • minlength - χρησιμοποιείται για την αντιστοίχιση μιας συμβολοσειράς με ελάχιστο μήκος
  • regex - χρησιμοποιείται για αντιστοίχιση μιας τυπικής έκφρασης

Δημιουργήστε προσαρμοσμένους περιορισμούς διαδρομής χαρακτηριστικών

Μπορείτε επίσης να δημιουργήσετε τους δικούς σας προσαρμοσμένους περιορισμούς διαδρομής δημιουργώντας μια κλάση που επεκτείνει τη διεπαφή IRouteConstraint και εφαρμόζει τη μέθοδο Match όπως φαίνεται στο απόσπασμα κώδικα που δίνεται παρακάτω.

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

    {

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

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

Τιμές RouteValueDictionary, RouteDirection routeDirection)

        {

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

        }

    }

Χρησιμοποιήστε αντικατάσταση διακριτικού σε διαδρομές χαρακτηριστικών σε επίπεδο ελεγκτή

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

[Διαδρομή ("[ελεγκτής] / [δράση]")]

δημόσια τάξη HomeController: Controller

{

ιδιωτικό αναγνωστικό ILOGger _logger;

δημόσιο HomeController (ILogger logger)

   {

_logger = καταγραφέας;

   }

δημόσιος δείκτης IActionResult ()

   {

Επιστροφή Προβολή ();

   }

// Άλλες μέθοδοι δράσης

}

Η δρομολόγηση χαρακτηριστικών στο ASP.NET Core σάς δίνει περισσότερο έλεγχο και ευελιξία στα URI στην εφαρμογή ιστού σας. Παρόλο που η δρομολόγηση βάσει σύμβασης μπορεί να διαμορφωθεί σε μία τοποθεσία, η οποία με τη σειρά της μπορεί να εφαρμοστεί σε όλους τους ελεγκτές στην εφαρμογή σας, είναι δύσκολο να υποστηρίξετε συγκεκριμένα μοτίβα URI (όπως έκδοση API) με δρομολόγηση βάσει σύμβασης.

Χρησιμοποιώντας τη δρομολόγηση χαρακτηριστικών, μπορείτε να αποσυνδέσετε τα ονόματα ελεγκτών και ενεργειών από το πρότυπο διαδρομής. Μπορείτε ακόμη να χρησιμοποιήσετε έναν συνδυασμό δρομολόγησης βάσει συμβάσεων και δρομολόγησης βάσει χαρακτηριστικών στις εφαρμογές 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