ASP.NET Web API útválasztás egyszerűen fogalmazva az a folyamat, amely a klienskéréseket a megfelelő Műveletekhez köti le. A "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings" című cikkben tapasztaltam, hogy útvonalakat állítottam be sablonok, konvenciók és HTTP metódusok segítségével, és ennek az előnye, hogy az útvonali sablonok egyenletesen vannak elhelyezve a WebApiConfig osztályban a App_Start mappa alatt, ami kényelmes a menedzsment szempontjából, de hátránya, hogy nem elég rugalmas.
A REST mindent erőforrásként kezel, és néha egy gyerekerőforrás, mint például az Ügyfél és a Rendelések, szeretnének kérelmet beírni, mint például customers/1/orders, de ezt az útvonalat nehéz pusztán konvencióval elérni. Valójában ASP.NET Web API egy útvonal funkciót biztosít, amely közvetlenül csatlakoztatható az Akcióhoz, és nagyon rugalmas és intuitív használat.
Próbáljuk meg, hogyan lehet használni az Útvonal funkciót ASP.NET MVC4-ben.
Engedélyezzük az Útvonal attribútumot
Először be kell állítanod a WebApiConfig-ben.
A fenti MapHttpAttributeRoutes módszer csak az újabb ASP.NET Web API verziókban érhető el.Ha a verziód viszonylag alacsony, eltávolíthatod a régi verziót, és telepítheted a legfrissebb verziót a NuGet Package Manager konzolon keresztül.
Ezután a Global.asax-ban kommentelned kell a WebApiConfig eredeti regisztrációs módját, és új módszert kell alkalmazni, az alábbiak szerint:
Ekkor a projekt futtatása a következő hibát jelentheti:
Ez azért van, mert amikor letöltöttem ASP.NET Web API legújabb verzióját, az icrosoft legújabb verzióját is letöltöttem. AspNet.WebApi.HelpPage。 Le tudod távolítani a HelpPage legújabb verzióját, és letölteni a régebbi verziót.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –force Install-Package Microsoft.AspNet.WebApi.HelpPage -pre
Használja az Útvonal tulajdonságot
Hozz létre egy Cusomter osztályt.
Hozz létre egy Order osztályt.
Hozz létre egy Database osztályt, hogy megkapd a Order gyűjteményt.
Hozz létre egy üres API vezérlőt, amely így írt:
Írd be a böngésződben a következőket:
Ha ASP.NET MVC4-et használsz fejlesztéshez, a következő hibát kaphatod az első futtatáskor:
[A] A System.Web.WebPages.Razor.Configuration.HostSection nem lehet átadni a [B]System.Web.WebPages.Razor.Configuration.HostSection formátumba. Az A típus a "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (a "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ a "Default" kontextusban található) System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). A B típus a "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (a "Default" kontextusban a "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ Ideiglenes ASP.NET Files/vs/feb7ce97/a525d58a/asse
Ennek oka, hogy a Razor legújabb verzióját használják a ASP.NET Web API legújabb verziójának letöltésekor. A Web.config gyökérkönyvtárában a következő konfigurációt kell konfigurálnod:
Használd a RoutePrefix funkciót
Ha az összes Műveletet előtagolni szeretnéd egy API vezérlőben, akkor a RoutePrefix funkciót az API vezérlőre helyezheted.
Például azt szeretnénk, hogy ilyen formátumban legyen: http://localhost/api/customers/1/orders
Módosítsd a OrdersControllert így.
Az Útvonal funkcióban ~ billentyűt is használhatod, hogy felülírd az akció előtagszabályait.
A RoutePrefix funkció által definiált előtag paraméterváltozókkal is rendelkezhet:
Útvonaltervezési korlátok
Paraméterváltozókat korlátozhatsz egy útvonalon a "{parameter variable name: constraint}" segítségével.
Fent, ha a fragmentum változó azonosítója int típusú, akkor az első művelethez irányítják, ha nem, akkor a második akcióhoz.
ASP.NET Web API beépített korlátozásai a következők:
{x:alpha} korlátozza a nagy- és kisbetűket. {x:bool} {x:datetime} {x:decimális} {x:double} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)} korlátozza a hossztartományt {x:long} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:regex(regex)}
Egy paraméterváltozóra egyszerre több korlátozást is beállíthatsz:
Valósítsd meg az IHttpRouteConstraint interfészt a korlátozási szabályok testreszabásához. Valósíts meg egy olyan korlátozást, amely nem lehet 0.
Regisztrálj egy egyedi korlátozást a WebApiConfig-ban a App_Start mappában.
Használj egyedi korlátozásokat.
Opcionális paraméterek és alapértelmezett értékeik
Ha egy útvonali paraméter változó opcionális, akkor a paraméternek alapértelmezett értéket is kell adni.
Add hozzá a ? gombot a korlát mögé, hogy jelölje az opcionálist, és állítsd be az id alapértelmezett értékét a metódusparaméterekben.
Határozz meg nevet az útvonalnak
Útválasztási prioritás
Az útvonal tulajdonság által meghatározott útvonalprioritást a konvenciók és a RouteOrder tulajdonság alapján határozzák meg.
A konvenciók a következők:
1. Statikus töredékváltozók 2. Töredékváltozók korlátokkal 3. Töredékváltozók korlátok nélkül 4. Wildcard fragment változó korlátokkal 5. Korlátlan vadkártya töredékváltozók
A RouteOrder tulajdonság alapértelmezett értéke 0, és minél kisebb az tulajdonság értéke, annál magasabb.
A fent említett útvonalválasztás prioritási sorrendje a következő:
orders/details statikus fragmentum változó, a RouteOrder tulajdonság értéke 0 orders/{id} korlátozott fragment változókkal a RouteOrder tulajdonságban 0 értékű orders/{customerName} egy korlátok nélküli fragmentumváltozó, és a RouteOrder tulajdonság értéke 0 orders/{*date} egy wildcard fragment változó, amelynek értéke 0 a RouteOrder tulajdonságban rendelések/függőben lévő útvonalOrder tulajdonságértéke 1
|