ASP.NET usmerjanje spletnih API-jev je preprosto povedano proces preslikave zahtev odjemalcev na ustrezne akcije. V članku "ASP.NET Web API Practice Series 03, predloge usmerjanja, konvencije usmerjanja, nastavitve usmerjanja" sem izkusil nastavitev poti preko predlog, konvencij in HTTP metod, prednost tega pristopa pa je, da so predloge usmerjanja enakomerno umeščene v razred WebApiConfig pod mapo App_Start, kar je priročno za upravljanje, vendar je slabost v tem, da ni dovolj prilagodljiv.
REST obravnava vse kot vir, včasih pa lahko vir z podrejenimi viri, kot so stranke in naročila, vnese zahtevo, kot so kupci/1/naročila, vendar je težko doseči to pot zgolj po konvenciji. Pravzaprav ASP.NET spletni API ponuja funkcijo Route, ki jo lahko neposredno povežemo z Action, kar je zelo prilagodljivo in intuitivno za uporabo.
Poglejmo, kako uporabljati funkcijo Route v ASP.NET MVC4.
Dovoli atribut Route
Najprej moraš nastaviti v WebApiConfig.
Zgornja metoda MapHttpAttributeRoutes je na voljo le v novejših različicah ASP.NET Web API-jaČe je vaša različica razmeroma nizka, lahko staro različico odstranite in najnovejšo namestite preko konzole NuGet Package Manager.
Nato morate v Global.asax komentirati prvotni način registracije WebApiConfig in sprejeti novo metodo, kot sledi:
V tem trenutku lahko zagon projekta poroča o naslednji napaki:
To je zato, ker sem ob prenosu najnovejše različice ASP.NET spletnega API-ja prenesel tudi najnovejšo različico icrosofta. AspNet.WebApi.HelpPage。 Lahko odstraniš najnovejšo različico HelpPage in preneseš starejšo različico.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Uporabite lastnost Route
Ustvarite Cusomter tečaj.
Ustvarite razred Order.
Ustvarite razred Database za pridobitev zbirke Order.
Ustvarite prazen API krmilnik, napisan takole:
V brskalnik vpišite naslednje:
Če za razvoj uporabljate ASP.NET MVC4, se lahko ob prvem zagonu programa pojavi naslednja napaka:
[A] System.Web.WebPages.Razor.Configuration.HostSection ni mogoče oddajati v [B]System.Web.WebPages.Razor.Configuration.HostSection. Tip A izhaja iz "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (v "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ v kontekstu "Default") System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Tip B izhaja iz "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (v kontekstu "Default" v "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ Začasne ASP.NET datoteke/vs/feb7ce97/a525d58a/asse
To je zato, ker se pri prenosu najnovejše različice spletnega API-ja ASP.NET uporablja najnovejša različica Razorja. V korenski mapi Web.config morate konfigurirati naslednjo konfiguracijo:
Uporabite funkcijo RoutePrefix
Če želite v API krmilniku predpono postaviti vse akcije, lahko funkcijo RoutePrefix namestite na API krmilnik.
Na primer, želimo, da je v takšni obliki: http://localhost/api/customers/1/orders
Na ta način spremenite OrdersController.
Lahko uporabite tudi ~ v funkciji Poti, da preglasite pravila predpone Dejanja.
Predpona, ki jo določa funkcija RoutePrefix, lahko vsebuje tudi parametrične spremenljivke:
Omejitve usmerjanja
Parametrične spremenljivke v poti lahko omejite z "{parameter variable name: constraint}".
Zgoraj, če je id fragmentne spremenljivke tipa int, se usmeri na prvo dejanje, če ne, pa na drugo dejanje.
ASP.NET Vgrajene omejitve spletnega API-ja vključujejo:
{x:alpha} omejuje velike in male črke {x:bool} {x:datetime} {x:decimal} {x:double} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)} omejuje razpon dolžine {x:long} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:regex(regex)}
Za parametrično spremenljivko lahko nastavite več omejitev hkrati:
Implementirajte vmesnik IHttpRouteConstraint za prilagoditev omejitev. Implementirajte omejitev, ki ne more biti 0.
Registrirajte prilagojeno omejitev v WebApiConfig v mapi App_Start.
Uporabi prilagojene omejitve.
Opcijski parametri in njihove privzete vrednosti
Če je spremenljivka usmerjevalnega parametra neobvezna, mora biti parametru dodeljena tudi privzeta vrednost.
Dodaj ? za omejitev za označevanje opcijskega in nastavi privzeto vrednost za id v parametrih metode.
Določite ime za pot
Prednost usmerjanja
Prioriteta poti, ki jo določa lastnost Route, je določena na podlagi konvencij in lastnosti RouteOrder.
Konvencije so:
1. Statične fragmentne spremenljivke 2. Fragmentne spremenljivke z omejitvami 3. Fragmentirajte spremenljivke brez omejitev 4. Spremenljivka z delom z nadomestnimi znaki z omejitvami 5. Neomejene spremenljivke fragmentov z divjimi znaki
Privzeta vrednost lastnosti RouteOrder je 0, in manjša kot je vrednost, višja je.
Zgoraj je vrstni red prioritet usmerjanja naslednji:
spremenljivka statičnih fragmentov orders/details, vrednost lastnosti RouteOrder je 0 orders/{id} z omejenimi fragmentnimi spremenljivkami z vrednostjo 0 v lastnosti RouteOrder orders/{customerName} je fragmentna spremenljivka brez omejitev, vrednost lastnosti RouteOrder pa je 0 orders/{*date} je spremenljivka z delom wildcard z vrednostjo 0 v lastnosti RouteOrder naročila/čakajoča vrednost lastnosti RouteOrder 1
|