Περιορισμοί δρομολόγησης
ASP.NET το Core, μπορείτε να μεταβιβάσετε μεταβλητές σε διευθύνσεις URL ορίζοντας πρότυπα δρομολόγησης και μπορείτε να παρέχετε προεπιλογές, προαιρετικά και περιορισμούς για μεταβλητές.
Ο περιορισμός χρησιμοποιείται με την προσθήκη του καθορισμένου ονόματος περιορισμού στη δρομολόγηση του χαρακτηριστικού, η οποία χρησιμοποιείται ως εξής:
Ορισμένοι περιορισμοί προβλέπονται ήδη εντός του πλαισίου, ως εξής:
Περιορισμοί | παράδειγμα | Παραδείγματα αγώνων | διευκρινίζω | Διεθνές | {id:int} | 123456789, -123456789 | Αντιστοιχίστε οποιονδήποτε ακέραιο αριθμό | bool | {ενεργό:bool} | σωστό, ΛΑΘΟΣ | Ταίριασμα true ή false (διάκριση πεζών-κεφαλαίων) | ημερομηνία/ώρα | {dob:ημερομηνία/ώρα} | 2016-12-31, 2016-12-31 7:32 μ.μ. | Ταιριάζει με έγκυρες τιμές ημερομηνίας/ώρας (σε σταθερή τοποθεσία - δείτε προειδοποίηση) | δεκαδικός | {τιμή:δεκαδικό} | 49.99, -1,000.01 | Ταιριάζει με έγκυρες δεκαδικές τιμές (σε σταθερή τοποθεσία - βλ. προειδοποίηση) | Διπλό | {βάρος:διπλό} | 1,234, -1.001,01ε8 | Ταιριάζει με έγκυρες διπλές τιμές (σε σταθερή τοποθεσία - βλ. προειδοποίηση) | επιπλέουν | {βάρος:float} | 1,234, -1.001,01ε8 | Ταιριάζει με έγκυρες τιμές float (σε σταθερή τοποθεσία - βλ. προειδοποιήσεις) | GUID | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Ταιριάζει με έγκυρες τιμές GUID | μακρύς | {τικ:μακρύ} | 123456789, -123456789 | Ταιριάζει με έγκυρες μεγάλες τιμές | minlength(τιμή) | {όνομα χρήστη:minlength(4)} | Ρικ | Η συμβολοσειρά πρέπει να αποτελείται από τουλάχιστον 4 χαρακτήρες | maxlength(τιμή) | {όνομα αρχείου:maxlength(8)} | Ρίτσαρντ | Οι συμβολοσειρές δεν πρέπει να υπερβαίνουν τους 8 χαρακτήρες | μήκος(μήκος) | {όνομα αρχείου:μήκος(12)} | somefile.txt | Η συμβολοσειρά πρέπει να αποτελείται ακριβώς από 12 χαρακτήρες | Μήκος (ελάχιστο, μέγιστο) | {όνομα αρχείου:μήκος(8,16)} | somefile.txt | Η συμβολοσειρά πρέπει να αποτελείται από τουλάχιστον 8 χαρακτήρες και όχι περισσότερους από 16 χαρακτήρες | min(τιμή) | {ηλικία:min(18)} | 19 | Η ακέραια τιμή πρέπει να είναι τουλάχιστον 18 | max(τιμή) | {ηλικία:max(120)} | 91 | Η ακέραια τιμή δεν πρέπει να υπερβαίνει το 120 | εύρος (ελάχιστο, μέγιστο) | {ηλικία:εύρος(18,120)} | 91 | Η ακέραια τιμή πρέπει να είναι τουλάχιστον 18 και να μην υπερβαίνει το 120 | άλφα | {όνομα:άλφα} | Ρικ | Η συμβολοσειρά πρέπει να αποτελείται από έναν ή περισσότερους αλφαβητικούς χαρακτήρες (a-z, με διάκριση πεζών-κεφαλαίων). | regex(έκφραση) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | Η συμβολοσειρά πρέπει να ταιριάζει με την κανονική έκφραση (δείτε συμβουλές για τον ορισμό κανονικών εκφράσεων) | απαιτούμενο | {όνομα:απαιτείται} | Ρικ | Χρησιμοποιείται για την επιβολή της παρουσίας μη παραμετρικών τιμών κατά τη δημιουργία URL |
Οι ενσωματωμένοι περιορισμοί λειτουργούν για τις πιο συνηθισμένες περιπτώσεις χρήσης, αλλά μερικές φορές πρέπει να προσαρμόσουμε το εφέ που θέλουμε.
Προσαρμοσμένοι περιορισμοί δρομολόγησης
Ένας προσαρμοσμένος περιορισμός είναι η υλοποίηση της διεπαφής IRouteConstraint και στη συνέχεια η υπερφόρτωση της μεθόδου Match, η οποία έχει τέσσερις παραμέτρους.
Η πρώτη παράμετρος, httpContext, είναι το πλαίσιο του τρέχοντος αιτήματος
Η δεύτερη παράμετρος, διαδρομή, είναι η διαδρομή στην οποία ανήκει ο τρέχων περιορισμός
Η τρίτη παράμετρος, routeKey, είναι το όνομα της μεταβλητής που ελέγχεται αυτήν τη στιγμή, όπως το id στο παράδειγμα στην αρχή του άρθρου Οι τιμές της τέταρτης παραμέτρου είναι η τιμή λεξικού που ταιριάζει με την τρέχουσα διεύθυνση URL, όπως η διαδρομή του παραδείγματος στην αρχή του άρθρου, εάν η διεύθυνση URL είναι users/1, τότε υπάρχει ένα λεξικό με κλειδί = id , τιμή = 1. Φυσικά, υπάρχουν και τιμές για άλλες μεταβλητές, όπως ελεγκτής, ενέργεια κ.λπ.
Η πέμπτη παράμετρος, routeDirection, είναι μια απαριθμημένη τιμή που αντιπροσωπεύει εάν η διεύθυνση URL ζητείται από τον ιστό ή δημιουργείται από μια μέθοδο όπως η Url.Action.
Για παράδειγμα, θέλουμε να ορίσουμε έναν περιορισμό που καθορίζει ότι οι παράμετροι που διαβιβάζονται από τη δρομολόγηση πρέπει να είναι η καθορισμένη τιμή απαρίθμησης.
Ας ορίσουμε πρώτα μια απαρίθμηση:
Στη συνέχεια, ορίστε τους περιορισμούς:
Προσθέστε προσαρμοσμένους περιορισμούς στη μέθοδο ConfigureServices στο Startup.cs:
Χρήση περιορισμών στις διαδρομές:
(Το WebApplicationTest είναι ο τρέχων χώρος ονομάτων)
{id:int:min(2)} Η διαδρομή πρέπει να χρησιμοποιεί min(2), διαφορετικά θα υπάρξει σύγκρουση για id = 0 ή id = 1.
Εκτελέστε το πρόγραμμα και αντιστοιχίστε τους προσαρμοσμένους περιορισμούς μας όταν οι διαδρομές είναι api/test/0, api/test/1, api/test/true και api/test/false.
Εάν η δρομολόγηση είναι api/test/{integer μεγαλύτερη από 2}, αντιστοιχίστε τη δεύτερη δρομολόγηση.
Άλλες περιπτώσεις ταιριάζουν με την τρίτη διαδρομή.
συμπέρασμα
Οι περιορισμοί δρομολόγησης είναι ένα πολύ χρήσιμο χαρακτηριστικό σε ορισμένα σενάρια, το οποίο μπορεί να μειώσει τις παραμέτρους ελέγχου στον ελεγκτή και η λειτουργία της μερικής επικύρωσης παραμέτρων μπορεί να υλοποιηθεί χρησιμοποιώντας δηλωτικό χαρακτηριστικό και ορισμένοι διπλοί έλεγχοι μπορούν να εξαχθούν σε περιορισμούς για δημόσια χρήση.
Ο κατασκευαστής του περιορισμού μπορεί να εγχυθεί, επομένως μπορεί να είναι πολύ επεκτάσιμος και κάποια επαλήθευση παραμέτρων μπορεί να γίνει με ερώτημα στη βάση δεδομένων.
Ο επίσημος ιστότοπος αναφέρει μόνο εν συντομία τους περιορισμούς δρομολόγησης και αυτό το άρθρο παρέχει συγκεκριμένα παραδείγματα χρήσης περιορισμών δρομολόγησης.
|