ASP.NET δρομολόγηση Web API, με απλά λόγια, είναι η διαδικασία αντιστοίχισης αιτημάτων πελατών σε αντίστοιχες ενέργειες. Στο άρθρο "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings", βίωσα τη ρύθμιση διαδρομών μέσω προτύπων, συμβάσεων και μεθόδων HTTP και το πλεονέκτημα αυτής της προσέγγισης είναι ότι τα πρότυπα δρομολόγησης τοποθετούνται ομοιόμορφα στην κλάση WebApiConfig κάτω από το φάκελο App_Start, κάτι που είναι βολικό για διαχείριση, αλλά το μειονέκτημα είναι ότι δεν είναι αρκετά ευέλικτο.
Το REST αντιμετωπίζει τα πάντα ως πόρο και μερικές φορές, ένας πόρος με θυγατρικούς πόρους, όπως Πελάτης και Παραγγελίες, μπορεί να θέλει να εισαγάγει ένα αίτημα όπως customers/1/orders, αλλά είναι δύσκολο να επιτευχθεί αυτή η διαδρομή μόνο με σύμβαση. Στην πραγματικότητα, ASP.NET Web API μας παρέχει μια λειτουργία Route, η οποία μπορεί να συνδεθεί απευθείας με το Action, η οποία είναι πολύ ευέλικτη και διαισθητική στη χρήση.
Ας δούμε πώς να χρησιμοποιήσετε τη δυνατότητα Route στο ASP.NET MVC4.
Να επιτρέπεται το χαρακτηριστικό δρομολόγησης
Πρώτα πρέπει να το ρυθμίσετε στο WebApiConfig.
Η παραπάνω μέθοδος MapHttpAttributeRoutes είναι διαθέσιμη μόνο σε νεότερες εκδόσεις του ASP.NET Web APIΕάν η έκδοσή σας είναι σχετικά χαμηλή, μπορείτε να απεγκαταστήσετε την παλιά έκδοση και να εγκαταστήσετε την πιο πρόσφατη έκδοση μέσω της κονσόλας NuGet Package Manager.
Στη συνέχεια, στο Global.asax, πρέπει να σχολιάσετε τον αρχικό τρόπο εγγραφής του WebApiConfig και να υιοθετήσετε μια νέα μέθοδο, ως εξής:
Προς το παρόν, η εκτέλεση του έργου ενδέχεται να αναφέρει το ακόλουθο σφάλμα:
Αυτό συμβαίνει επειδή κατά τη λήψη της πιο πρόσφατης έκδοσης του ASP.NET Web API, κατέβασα επίσης την πιο πρόσφατη έκδοση του icrosoft. AspNet.WebApi.HelpPage。 Μπορείτε να απεγκαταστήσετε την πιο πρόσφατη έκδοση του HelpPage και να κάνετε λήψη της παλαιότερης έκδοσης.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Χρήση της ιδιότητας Δρομολόγηση
Δημιουργήστε μια κλάση Cusomter.
Δημιουργήστε μια κλάση Order.
Δημιουργήστε μια κλάση Database για να λάβετε τη συλλογή Order.
Δημιουργήστε έναν κενό ελεγκτή API γραμμένο ως εξής:
Πληκτρολογήστε τα ακόλουθα στο πρόγραμμα περιήγησής σας:
Εάν χρησιμοποιείτε ASP.NET MVC4 για ανάπτυξη, ενδέχεται να λάβετε το ακόλουθο σφάλμα όταν το πρόγραμμα εκτελείται για πρώτη φορά:
[ένα] Το System.Web.WebPages.Razor.Configuration.HostSection δεν μπορεί να μεταδοθεί στο [B]System.Web.WebPages.Razor.Configuration.HostSection. Ο τύπος Α προέρχεται από το "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (στο "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ στο πλαίσιο "Προεπιλογή") System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Ο τύπος Β προέρχεται από το "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (στο πλαίσιο "Προεπιλογή" στο "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ Προσωρινά αρχεία ASP.NET/vs/feb7ce97/a525d58a/asse
Αυτό συμβαίνει επειδή η πιο πρόσφατη έκδοση του Razor χρησιμοποιείται κατά τη λήψη της πιο πρόσφατης έκδοσης του ASP.NET Web API. Πρέπει να διαμορφώσετε την ακόλουθη διαμόρφωση στον ριζικό κατάλογο του Web.config:
Χρησιμοποιήστε τη λειτουργία RoutePrefix
Εάν θέλετε να προσθέσετε πρόθεμα σε όλες τις ενέργειες σε έναν ελεγκτή API, μπορείτε να τοποθετήσετε τη δυνατότητα RoutePrefix στον ελεγκτή API.
Για παράδειγμα, θέλουμε να είναι σε μορφή όπως αυτή: http://localhost/api/customers/1/orders
Τροποποιήστε το OrdersController με αυτόν τον τρόπο.
Μπορείτε επίσης να χρησιμοποιήσετε το ~ στη λειτουργία Διαδρομή για να παρακάμψετε τους κανόνες προθέματος της Ενέργειας.
Το πρόθεμα που ορίζεται από τη δυνατότητα RoutePrefix μπορεί επίσης να έχει μεταβλητές παραμέτρων:
Περιορισμοί δρομολόγησης
Μπορείτε να περιορίσετε τις μεταβλητές παραμέτρων σε μια δρομολόγηση με το "{parameter variable name: constraint}".
Παραπάνω, εάν το αναγνωριστικό μεταβλητής τμήματος είναι τύπου int, δρομολογείται στην πρώτη ενέργεια και εάν όχι, δρομολογείται στη δεύτερη ενέργεια.
ASP.NET Οι ενσωματωμένοι περιορισμοί του Web API περιλαμβάνουν:
{x:alpha} περιορίζει τα κεφαλαία και πεζά γράμματα {x:bool} {x:ημερομηνία/ώρα} {x:δεκαδικό} {x:διπλό} {x:float} {x:guid} {x:int} {x:μήκος(6)} {x:length(1,20)} περιορίζει το εύρος μήκους {x:μακρύ} {x:μέγιστο μήκος(10)} {x:min(10)} {x:εύρος(10,50)} {x:regex(regex)}
Μπορείτε να ορίσετε πολλούς περιορισμούς για μια μεταβλητή παραμέτρου ταυτόχρονα:
Εφαρμόστε τη διασύνδεση IHttpRouteConstraint για να προσαρμόσετε τους κανόνες περιορισμών. Εφαρμόστε έναν περιορισμό που δεν μπορεί να είναι 0.
Καταχωρίστε έναν προσαρμοσμένο περιορισμό στο WebApiConfig στον φάκελο App_Start.
Χρησιμοποιήστε προσαρμοσμένους περιορισμούς.
Προαιρετικές παράμετροι και οι προεπιλεγμένες τιμές τους
Εάν μια μεταβλητή παραμέτρου δρομολόγησης είναι προαιρετική, πρέπει επίσης να δοθεί στην παράμετρο μια προεπιλεγμένη τιμή.
Προσθέστε ? μετά τον περιορισμό για να υποδείξετε προαιρετικό και ορίστε την προεπιλεγμένη τιμή για το id στις παραμέτρους της μεθόδου.
Ορισμός ονόματος για τη διαδρομή
Προτεραιότητα δρομολόγησης
Η προτεραιότητα δρομολόγησης που ορίζεται από την ιδιότητα Δρομολόγηση καθορίζεται με βάση τις συμβάσεις και την ιδιότητα RouteOrder.
Οι συμβάσεις είναι:
1. Μεταβλητές στατικού τμήματος 2. Κατακερματισμός μεταβλητών με περιορισμούς 3. Κατακερματισμός μεταβλητών χωρίς περιορισμούς 4. Μεταβλητή τμήματος μπαλαντέρ με περιορισμούς 5. Απεριόριστες μεταβλητές τμημάτων μπαλαντέρ
Η προεπιλεγμένη τιμή της ιδιότητας RouteOrder είναι 0 και όσο μικρότερη είναι η τιμή της ιδιότητας, τόσο υψηλότερη είναι.
Παραπάνω, η σειρά προτεραιότητας για τη δρομολόγηση είναι:
παραγγελιών/λεπτομερειών μεταβλητή στατικού τμήματος, η τιμή της ιδιότητας RouteOrder είναι 0 orders/{id} με περιορισμένες μεταβλητές τμήματος με τιμή 0 στην ιδιότητα RouteOrder orders/{customerName} είναι μια μεταβλητή τμήματος χωρίς περιορισμούς και η τιμή της ιδιότητας RouteOrder είναι 0 orders/{*date} είναι μια μεταβλητή τμήματος μπαλαντέρ με τιμή 0 στην ιδιότητα RouteOrder παραγγελίες/εκκρεμείς τιμές ιδιότητας RouteOrder 1
|