ASP.NET směrování Web API je jednoduše řečeno proces mapování klientských požadavků na odpovídající akce. V článku "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings" jsem zažil nastavení tras přes šablony, konvence a HTTP metody, a výhodou tohoto přístupu je, že šablony směrování jsou jednotně umístěny ve třídě WebApiConfig pod složkou App_Start, což je pohodlné pro správu, ale nevýhodou je, že není dostatečně flexibilní.
REST považuje vše za zdroj a někdy může být zdroj s podzdroji, jako jsou Customer a Orders, chtít zadat požadavek jako customers/1/Orders, ale tímto způsobem je obtížné dosáhnout pouze podle konvence. Ve skutečnosti nám ASP.NET Web API poskytuje funkci Route, kterou lze přímo propojit s Action, jež je velmi flexibilní a intuitivní na používání.
Pojďme si vyzkoušet, jak používat funkci Route v ASP.NET MVC4.
Povolit atribut Route
Nejprve to musíte nastavit ve WebApiConfig.
Výše uvedená metoda MapHttpAttributeRoutes je dostupná pouze v novějších verzích ASP.NET Web APIPokud je vaše verze relativně nízká, můžete odinstalovat starou verzi a nainstalovat nejnovější přes konzoli Správce balíčků NuGet.
Dále v Global.asax musíte okomentovat původní způsob registrace WebApiConfig a přijmout novou metodu, a to následovně:
V tuto chvíli může spuštění projektu hlásit následující chybu:
Je to proto, že při stahování nejnovější verze ASP.NET Web API jsem si stáhl i nejnovější verzi icrosoftu. AspNet.WebApi.HelpPage。 Můžete odinstalovat nejnovější verzi HelpPage a stáhnout si starší.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Použijte vlastnost Route
Vytvořte si kurz Cusomter.
Vytvořte třídu Order.
Vytvořte třídu Databáze pro získání kolekce Order.
Vytvořte prázdný API controller napsaný takto:
Zadejte do svého prohlížeče následující:
Pokud používáte ASP.NET MVC4 pro vývoj, můžete při prvním spuštění programu dostat následující chybu:
[A] System.Web.WebPages.Razor.Configuration.HostSection nelze přenášet do [B]System.Web.WebPages.Razor.Configuration.HostSection. Typ A je odvozen z "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (v "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ v kontextu "Default") System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Typ B je odvozen z "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (v kontextu "Default" v "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ Dočasné ASP.NET Files/vs/feb7ce97/a525d58a/asse
Je to proto, že při stahování nejnovější verze ASP.NET Web API se používá nejnovější verze Razoru. V kořenovém adresáři Web.config je potřeba nastavit následující konfiguraci:
Použijte funkci RoutePrefix
Pokud chcete předpojit všechny akce v API controlleru, můžete na API controlleru umístit funkci RoutePrefix.
Například chceme, aby to bylo ve formátu takto: http://localhost/api/customers/1/orders
Upravte OrdersController tímto způsobem.
Můžete také použít ~ ve funkci Route k přepsání pravidel předpony Akce.
Prefix definovaný funkcí RoutePrefix může mít také proměnné parametrů:
Směrovací omezení
Parametrické proměnné v trase můžete omezit pomocí "{parameter variable name: constraint}".
Výše, pokud je fragmentní proměnná id typu int, je směrováno na první akci, a pokud ne, je směrováno na druhou akci.
ASP.NET Vestavěná omezení Web API zahrnují:
{x:alpha} omezuje velká a malá písmena {x:bool} {x:datetime} {x:decimal} {x:double} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)} omezuje rozsah délky {x:long} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:regex(regex)}
Můžete nastavit více omezení pro proměnnou parametru současně:
Implementujte rozhraní IHttpRouteConstraint pro přizpůsobení pravidel omezení. Implementujte omezení, které nemůže být 0.
Zaregistrujte vlastní omezení ve WebApiConfig ve složce App_Start.
Používejte vlastní omezení.
Volitelné parametry a jejich výchozí hodnoty
Pokud je proměnná směrovacího parametru volitelná, musí být i tato proměnná přiřazena výchozí hodnota.
Přidejte ? za omezení, aby označili volitelné, a nastavte výchozí hodnotu id v parametrech metody.
Stanovte trasě jméno
Priorita směrování
Priorita trasy nastavená vlastností Route je určena na základě konvencí a vlastnosti RouteOrder.
Konvence jsou:
1. Statické fragmentové proměnné 2. Fragmentační proměnné s omezeními 3. Fragmentní proměnné bez omezení 4. Proměnná fragmentů divoké karty s omezeními 5. Neomezené proměnné fragmentů divoké karty
Výchozí hodnota vlastnosti RouteOrder je 0 a čím menší hodnota vlastnosti, tím vyšší je.
Výše uvedené pořadí priority směrování je:
proměnná ordered / details statická fragment, hodnota vlastnosti RouteOrder je 0 orders/{id} s omezenými fragmentními proměnnými s hodnotou 0 ve vlastnosti RouteOrder orders/{customerName} je fragmentová proměnná bez omezení a hodnota vlastnosti RouteOrder je 0 orders/{*date} je proměnná fragmentů divoké karty s hodnotou 0 ve vlastnosti RouteOrder příkazy/čekající hodnota vlastnosti RouteOrder 1
|