ASP.NET Web API-routing är enkelt uttryckt processen att mappa klientförfrågningar till motsvarande Actions. I artikeln "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings" upplevde jag att sätta rutter genom mallar, konventioner och HTTP-metoder, och fördelen med detta tillvägagångssätt är att routingmallarna är enhetligt placerade i WebApiConfig-klassen under App_Start-mappen, vilket är bekvämt för hantering, men nackdelen är att det inte är tillräckligt flexibelt.
REST behandlar allt som en resurs, och ibland kan en resurs med barnresurser, som Customer och Orders, vilja ange en förfrågan som customers/1/orders, men det är svårt att uppnå denna väg enbart genom konvention. Faktum är att ASP.NET Web API ger oss en Route-funktion som kan kopplas direkt till Action, vilket är mycket flexibelt och intuitivt att använda.
Låt oss prova hur man använder Route-funktionen i ASP.NET MVC4.
Tillåt attributet Route.
Först måste du ställa in det i WebApiConfig.
Ovanstående MapHttpAttributeRoutes-metoden är endast tillgänglig i nyare versioner av ASP.NET Web APIOm din version är relativt låg kan du avinstallera den gamla versionen och installera den senaste versionen via NuGet Package Manager-konsolen.
Därefter, i Global.asax, behöver du kommentera det ursprungliga sättet att registrera WebApiConfig och anta en ny metod, enligt följande:
Vid denna tidpunkt kan det rapportera följande fel när projektet körs:
Detta beror på att när jag laddade ner den senaste versionen av ASP.NET Web API, laddade jag också ner den senaste versionen av icrosoft. AspNet.WebApi.HelpPage。 Du kan avinstallera den senaste versionen av HelpPage och ladda ner den äldre versionen.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Använd egenskapen Route
Skapa en Cusomter-klass.
Skapa en Order-klass.
Skapa en databasklass för att få ordningssamlingen.
Skapa en tom API-kontroller skriven så här:
Skriv följande i din webbläsare:
Om du använder ASP.NET MVC4 för utveckling kan du få följande felmeddelande när programmet körs första gången:
[A] System.Web.WebPages.Razor.Configuration.HostSection kan inte kastas till [B]System.Web.WebPages.Razor.Configuration.HostSection. Typ A härstammar från "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (i "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ i kontexten "Default") System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Typ B härstammar från "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (i kontexten "Default" i "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ Tillfällig ASP.NET Filer/vs/feb7ce97/a525d58a/asse
Detta beror på att den senaste versionen av Razor används när den senaste versionen av ASP.NET Web API laddas ner. Du behöver konfigurera följande konfiguration i rotkatalogen för Web.config:
Använd funktionen RoutePrefix
Om du vill prefixa alla Actions i en API-kontroller kan du lägga RoutePrefix-funktionen på API-kontrollern.
Till exempel vill vi att det ska vara i ett format som detta: http://localhost/api/customers/1/orders
Modifiera OrdersController på detta sätt.
Du kan också använda ~ i Route-funktionen för att åsidosätta prefixreglerna för Action.
Prefixet som definieras av RoutePrefix-funktionen kan också ha parametervariabler:
Ruttningsbegränsningar
Du kan begränsa parametervariabler i en rutt med "{parameter variabelnamn: begränsning}".
Ovan, om fragmentvariabeln id är av typen int, routas den till den första Handlingen, och om inte, routas den till den andra Åtgärden.
ASP.NET inbyggda Web API-begränsningar inkluderar:
{x:alpha} begränsar versaler och små bokstäver {x:bool} {x:datetime} {x:decimal} {x:double} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)} begränsar längdintervallet {x:long} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:regex(regex)}
Du kan sätta flera begränsningar för en parametervariabel samtidigt:
Implementera gränssnittet IHttpRouteConstraint för att anpassa begränsningsreglerna. Implementera en begränsning som inte kan vara 0.
Registrera en anpassad begränsning i WebApiConfig i mappen App_Start.
Använd anpassade begränsningar.
Valfria parametrar och deras standardvärden
Om en routingparametervariabel är valfri måste parametern också ges ett standardvärde.
Lägg till ? efter begränsningen för att ange valfritt, och sätt standardvärdet för id i metodparametrarna.
Sätt ett namn på rutten
Routingprioritet
Ruttprioriteten som sätts av Route-egenskapen bestäms baserat på konventioner och RouteOrder-egenskapen.
Konventen är:
1. Statiska fragmentvariabler 2. Fragmentvariabler med begränsningar 3. Fragmentvariabler utan begränsningar 4. Jokerfragmentvariabel med begränsningar 5. Obegränsade jokerkortsfragmentvariabler
Standardvärdet för egenskapen RouteOrder är 0, och ju mindre egenskapsvärdet, desto högre är det.
Ovan, prioriteringsordningen för routing:
order/details statisk fragmentvariabel, värdet på egenskapen RouteOrder är 0 orders/{id} med begränsade fragmentvariabler med värdet 0 i egenskapen RouteOrder orders/{customerName} är en fragmentvariabel utan begränsningar, och värdet på egenskapen RouteOrder är 0 orders/{*date} är en joker-fragmentvariabel med värdet 0 i egenskapen RouteOrder order/väntande RouteOrder-egendomsvärde på 1
|