ASP.NET Web API-ruting er enkelt sagt prosessen med å kartlegge klientforespørsler til tilsvarende handlinger. I artikkelen "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings" opplevde jeg å sette ruter gjennom maler, konvensjoner og HTTP-metoder, og fordelen med denne tilnærmingen er at rutingmalene er jevnt plassert i WebApiConfig-klassen under App_Start-mappen, noe som er praktisk for administrasjon, men ulempen er at den ikke er fleksibel nok.
REST behandler alt som en ressurs, og noen ganger kan en ressurs med barneressurser, som Customer og Orders, ønske å legge inn en forespørsel som customers/1/orders, men det er vanskelig å oppnå denne veien kun ved konvensjon. Faktisk gir ASP.NET Web API oss en Route-funksjon, som kan kobles direkte til Action, og som er veldig fleksibel og intuitiv å bruke.
La oss oppleve hvordan du bruker rutefunksjonen i ASP.NET MVC4.
Tillat Route-attributtet
Først må du sette det opp i WebApiConfig.
Metoden MapHttpAttributeRoutes ovenfor er kun tilgjengelig i nyere versjoner av ASP.NET Web APIHvis versjonen din er relativt lav, kan du avinstallere den gamle versjonen og installere den nyeste versjonen via NuGet Package Manager-konsollen.
Deretter, i Global.asax, må du kommentere den opprinnelige måten å registrere WebApiConfig på og ta i bruk en ny metode, som følger:
På dette tidspunktet kan kjøring av prosjektet rapportere følgende feil:
Dette er fordi da jeg lastet ned den nyeste versjonen av ASP.NET Web API, lastet jeg også ned den nyeste versjonen av icrosoft. AspNet.WebApi.HelpPage。 Du kan avinstallere den nyeste versjonen av HelpPage og laste ned den eldre versjonen.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Bruk Rute-egenskapen
Lag en Cusomter-klasse.
Lag en Order-klasse.
Opprett en databaseklasse for å hente Order-samlingen.
Lag en tom API-kontroller skrevet slik:
Skriv følgende i nettleseren din:
Hvis du bruker ASP.NET MVC4 til utvikling, kan du få følgende feil når programmet kjøres for første gang:
[A] System.Web.WebPages.Razor.Configuration.HostSection kan ikke kastes til [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A er avledet fra "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (i "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ i konteksten "Default") System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Type B er avledet fra "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (i kontekst "Default" i "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ Midlertidig ASP.NET Filer/vs/feb7ce97/a525d58a/asse
Dette skyldes at den nyeste versjonen av Razor brukes når man laster ned den nyeste versjonen av ASP.NET Web API. Du må konfigurere følgende konfigurasjon i rotkatalogen til Web.config:
Bruk RoutePrefix-funksjonen
Hvis du vil prefikse alle handlinger i en API-kontroller, kan du legge RoutePrefix-funksjonen på API-kontrolleren.
For eksempel ønsker vi at det skal være i et format som dette: http://localhost/api/customers/1/orders
Endre OrdersController på denne måten.
Du kan også bruke ~ i rutefunksjonen for å overstyre prefiksreglene i handlingen.
Prefikset definert av RoutePrefix-funksjonen kan også ha parametervariabler:
Rutingsbegrensninger
Du kan begrense parametervariabler i en rute ved å bruke "{parametervariabelnavn: constraint}".
Ovenfor, hvis fragmentvariabelen id er av typen int, rutes den til den første handlingen, og hvis ikke, rutes den til den andre handlingen.
ASP.NET innebygde begrensninger i Web API inkluderer:
{x:alpha} begrenser store og små bokstaver {x:bool} {x:datetime} {x:desimal} {x:double} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)} begrenser lengdeområdet {x:long} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:regex(regex)}
Du kan sette flere begrensninger for en parametervariabel samtidig:
Implementer grensesnittet IHttpRouteConstraint for å tilpasse begrensningsreglene. Implementer en begrensning som ikke kan være 0.
Registrer en egendefinert begrensning i WebApiConfig i App_Start-mappen.
Bruk egendefinerte begrensninger.
Valgfrie parametere og deres standardverdier
Hvis en routingparametervariabel er valgfri, må parameteren også få en standardverdi.
Legg til ? etter begrensningen for å indikere valgfritt, og sett standardverdien for id i metodeparametrene.
Sett et navn på ruten
Rutingsprioritet
Ruteprioriteten satt av Route-egenskapen bestemmes basert på konvensjoner og RouteOrder-egenskapen.
Konvensjonene er:
1. Statiske fragmentvariabler 2. Fragmentvariabler med begrensninger 3. Fragmentvariabler uten begrensninger 4. Jokerfragmentvariabel med begrensninger 5. Ubegrensede wildcard-fragmentvariabler
Standardverdien til RouteOrder-egenskapen er 0, og jo mindre egenskapsverdien, desto høyere er den.
Ovenfor er prioriteringsrekkefølgen for ruting:
ordrer/detaljer statisk fragmentvariabel, verdien av RouteOrder-egenskapen er 0 orders/{id} med begrensede fragmentvariabler med verdien 0 i RouteOrder-egenskapen orders/{customerName} er en fragmentvariabel uten begrensninger, og verdien av RouteOrder-egenskapen er 0 orders/{*date} er en joker-fragmentvariabel med verdien 0 i RouteOrder-egenskapen ordrer/ventende RouteOrder-egenskapsverdi på 1
|