ASP.NET smerovanie Web API, jednoducho povedané, je proces mapovania klientskych požiadaviek na príslušné akcie. V článku "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings" som zažil nastavenie tras cez šablóny, konvencie a HTTP metódy, pričom výhodou tohto prístupu je, že šablóny smerovania sú jednotne umiestnené v triede WebApiConfig pod priečinkom App_Start, čo je pohodlné na správu, ale nevýhodou je, že nie je dostatočne flexibilná.
REST považuje všetko za zdroj a niekedy môže zdroj s podzdrojmi, ako sú Customer a Orders, chcieť zadať požiadavku ako customer/1/orders, ale je ťažké dosiahnuť túto cestu len konvenciou. V skutočnosti nám ASP.NET webové API poskytuje funkciu Route, ktorú možno priamo prepojiť s Action, čo je veľmi flexibilné a intuitívne na používanie.
Poďme si vyskúšať, ako používať funkciu Route v ASP.NET MVC4.
Povoľte atribút Route
Najprv to musíš nastaviť vo WebApiConfig.
Vyššie uvedená metóda MapHttpAttributeRoutes je dostupná iba v novších verziách ASP.NET Web APIAk je vaša verzia relatívne nízka, môžete starú verziu odinštalovať a najnovšiu nainštalovať cez konzolu NuGet Package Manager.
Ďalej v Global.asax musíte opísať pôvodný spôsob registrácie WebApiConfig a prijať novú metódu, nasledovne:
V súčasnosti môže spustenie projektu hlásiť nasledujúcu chybu:
Je to preto, že pri sťahovaní najnovšej verzie ASP.NET Web API som si tiež stiahol najnovšiu verziu icrosoftu. AspNet.WebApi.HelpPage。 Môžete odinštalovať najnovšiu verziu HelpPage a stiahnuť si staršiu verziu.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Použite vlastnosť Route
Vytvorte si kurz Cusomter.
Vytvorte triedu Order.
Vytvorte triedu Databáza na získanie kolekcie Order.
Vytvorte prázdny API kontrolér napísaný takto:
Zadajte do prehliadača nasledujúce:
Ak používate ASP.NET MVC4 na vývoj, môžete pri prvom spustení programu dostať nasledujúcu chybu:
[A] System.Web.WebPages.Razor.Configuration.HostSection nemožno vysielať do [B]System.Web.WebPages.Razor.Configuration.HostSection. Typ A je odvodený z "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (v "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ v kontexte "Default") System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Typ B je odvodený z "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (v kontexte "Default" v "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ Dočasné ASP.NET súbory/vs/feb7ce97/a525d58a/asse
Je to preto, že pri sťahovaní najnovšej verzie ASP.NET Web API sa používa najnovšia verzia Razoru. V koreňovom adresári Web.config je potrebné nakonfigurovať nasledujúcu konfiguráciu:
Použite funkciu RoutePrefix
Ak chcete prefixovať všetky akcie v API kontroléri, môžete na API kontroléri umiestniť funkciu RoutePrefix.
Napríklad chceme, aby to bolo vo formáte takto: http://localhost/api/customers/1/orders
Upravte OrdersController týmto spôsobom.
Môžete tiež použiť ~ vo funkcii Route na prepísanie pravidiel prefixu akcie.
Prefix definovaný funkciou RoutePrefix môže mať aj parametrické premenné:
Smerovacie obmedzenia
Môžete obmedziť parametrické premenné v trase pomocou "{parameter variable name: constraint}".
Vyššie, ak je fragment premennej id typu int, smeruje sa na prvú akciu, a ak nie, smeruje sa na druhú akciu.
ASP.NET Vstavané obmedzenia Web API zahŕňajú:
{x:alpha} obmedzuje veľké a malé písmená {x:bool} {x:datetime} {x:decimal} {x:double} {x:float} {x:guid} {x:int} {x:dĺžka(6)} {x:length(1,20)} obmedzuje rozsah dĺžky {x:long} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:regex(regex)}
Pre parametrovú premennú môžete nastaviť viacero obmedzení súčasne:
Implementujte rozhranie IHttpRouteConstraint na prispôsobenie pravidiel obmedzení. Implementujte obmedzenie, ktoré nemôže byť 0.
Zaregistrujte vlastné obmedzenie vo WebApiConfig v priečinku App_Start.
Používajte vlastné obmedzenia.
Voliteľné parametre a ich predvolené hodnoty
Ak je premenná smerovacieho parametra voliteľná, musí mať aj predvolenú hodnotu.
Pridajte ? za obmedzenie na označenie voliteľného a nastavte predvolenú hodnotu id v parametroch metódy.
Stanovte názov pre trasu
Priorita smerovania
Priorita trasy nastavená vlastnosťou Route sa určuje na základe konvencií a vlastnosti RouteOrder.
Konvencie sú:
1. Statické fragmentové premenné 2. Fragmentové premenné s obmedzeniami 3. Fragmentujte premenné bez obmedzení 4. Premenná fragmentov divokej karty s obmedzeniami 5. Neobmedzené premenné fragmentov divokej karty
Predvolená hodnota vlastnosti RouteOrder je 0 a čím menšia je hodnota vlastnosti, tým vyššia je.
Vyššie uvedené poradie priorít smerovania je:
statická fragmentová premenná orders/details, hodnota vlastnosti RouteOrder je 0 orders/{id} s obmedzenými fragmentárnymi premennými s hodnotou 0 vo vlastnosti RouteOrder orders/{customerName} je fragmentová premenná bez obmedzení a hodnota vlastnosti RouteOrder je 0 orders/{*date} je premenná fragmentov divokej karty s hodnotou 0 vo vlastnosti RouteOrder príkazy/čakajúce vlastnosti RouteOrder hodnota 1
|