ASP.NET routing delle Web API, in parole semplici, è il processo di mappare le richieste dei client alle corrispondenti Azioni. Nell'articolo "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings", ho sperimentato l'impostazione di route tramite template, convenzioni e metodi HTTP, e il vantaggio di questo approccio è che i template di routing sono posizionati uniformemente nella classe WebApiConfig sotto la cartella App_Start, il che è comodo per la gestione, ma lo svantaggio è che non è abbastanza flessibile.
REST tratta tutto come una risorsa, e a volte una risorsa con risorse figlie, come Customer e Orders, può voler inserire una richiesta come customers/1/orders, ma è difficile ottenere questa strada solo per convenzione. Infatti, ASP.NET API Web ci offre una funzione Route, che può essere collegata direttamente ad Action, molto flessibile e intuitiva da usare.
Vediamo come usare la funzione Route in ASP.NET MVC4.
Consenti l'attributo Route
Prima devi configurarlo in WebApiConfig.
Il metodo MapHttpAttributeRoutes sopra descritto è disponibile solo nelle versioni più recenti della Web API ASP.NETSe la tua versione è relativamente bassa, puoi disinstallare la vecchia versione e installare l'ultima versione tramite la console NuGet Package Manager.
Successivamente, in Global.asax, devi commentare il modo originale di registrare WebApiConfig e adottare un nuovo metodo, come segue:
Al momento, l'esecuzione del progetto può segnalare il seguente errore:
Questo perché, scaricando l'ultima versione della ASP.NET Web API, ho anche scaricato l'ultima versione di icrosoft. AspNet.WebApi.HelpPage。 Puoi disinstallare l'ultima versione di HelpPage e scaricare la versione precedente.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Usa la proprietà Route
Crea una classe Cusomter.
Crea una classe Ordine.
Crea una classe Database per ottenere la collezione degli Ordini.
Crea un controller API vuoto scritto così:
Digita quanto segue nel tuo browser:
Se stai usando ASP.NET MVC4 per lo sviluppo, potresti ricevere il seguente errore quando il programma viene eseguito per la prima volta:
[A] System.Web.WebPages.Razor.Configuration.HostSection non può essere trasmesso a [B]System.Web.WebPages.Razor.Configuration.HostSection. Il Tipo A deriva da "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (in "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ nel contesto "Default") System.Web.WebPages.Razor/v4.0_2.0.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Il Tipo B deriva da "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (nel contesto "Default" in "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ File temporanei ASP.NET/vs/feb7ce97/a525d58a/asse
Questo perché l'ultima versione di Razor viene utilizzata per scaricare l'ultima versione dell'API Web di ASP.NET. Devi configurare la seguente configurazione nella directory root di Web.config:
Usa la funzione RoutePrefix
Se vuoi prefissare tutte le Azioni in un controller API, puoi inserire la funzione RoutePrefix sul controller API.
Ad esempio, vogliamo che sia in un formato come questo: http://localhost/api/customers/1/orders
Modifica l'OrdersController in questo modo.
Puoi anche usare ~ nella funzione Percorso per sovrascrivere le regole prefisso dell'Azione.
Il prefisso definito dalla caratteristica RoutePrefix può anche avere variabili parametri:
Vincoli di instradamento
Puoi vincolare le variabili parametri in un percorso tramite "{nome variabile parametro: vincolo}".
Sopra, se l'id della variabile del frammento è di tipo int, viene instradato alla prima Azione e, in caso contrario, viene instradato alla seconda Azione.
ASP.NET vincoli integrati dell'API Web includono:
{x:alpha} vincoli maiuscoli e minuscoli {x:bool} {x:datetime} {x:decimale} {x:doppio} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)} limita l'intervallo di lunghezza {x:lungo} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:regex(regex)}
Puoi impostare più vincoli per una variabile parametrica contemporaneamente:
Implementa l'interfaccia IHttpRouteConstraint per personalizzare le regole di vincolo. Implementare un vincolo che non possa essere 0.
Registra un vincolo personalizzato in WebApiConfig nella cartella App_Start.
Usa vincoli personalizzati.
Parametri opzionali e i loro valori predefiniti
Se una variabile del parametro di instradamento è opzionale, il parametro deve avere anche un valore predefinito.
Aggiungi ? dopo il vincolo per indicare opzionale, e imposta il valore predefinito di id nei parametri del metodo.
Impostare un nome per il percorso
Priorità di instradamento
La priorità di percorso impostata dalla proprietà Route è determinata in base alle convenzioni e alla proprietà RouteOrder.
Le convenzioni sono:
1. Variabili di frammento statiche 2. Frammentare variabili con vincoli 3. Frammentare variabili senza vincoli 4. Variabile di frammento jolly con vincoli 5. Variabili di frammento wildcard non vincolate
Il valore predefinito della proprietà RouteOrder è 0, e più basso è il valore della proprietà, più alto è.
Sopra, l'ordine di priorità per l'instradamento è:
variabile statica di frammenti orders/details, il valore della proprietà RouteOrder è 0 orders/{id} con variabili di frammento vincolate con valore 0 nella proprietà RouteOrder orders/{customerName} è una variabile frammentazione senza vincoli, e il valore della proprietà RouteOrder è 0 orders/{*date} è una variabile di frammento jolly con valore 0 nella proprietà RouteOrder ordini/valore della proprietà RouteOrder pendente di 1
|