aree di supporto nella URL web API
devi semplicemente registrare la rotta dell'API Web.
Ma questo percorso deve essere registrato prima degli altri percorsi. In caso contrario, le richieste all'API Web verranno gestite erroneamente come se fossero un'azione MVC.
Quando si utilizzano le aree, è necessario tenere conto del fatto che la registrazione delle rotte delle aree viene effettuata di solito prima della registrazione dei percorsi non dell'area. IO.e, in Global.asax Application_Start
avete queste righe di codice, in questo ordine:
AreaRegistration.RegisterAllAreas();
// ...
RouteConfig.RegisterRoutes(RouteTable.Routes);
La prima chiamata di metodo invocherà il metodo di ogni RegisterArea
trovato xxxAreaRegistration
classe. E, all'interno di questa configurazione è solitamente avere qualcosa di simile:
context.MapRoute(
"AreaName_default",
"AreaName/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
Se si desidera avere i controller Web API all'interno di questa zona, è necessario aggiungere il percorso Web API prima di questo, in questo modo:
context.Routes.MapHttpRoute("AreaName_WebApiRoute",
"AreaName/Api/{controller}/{id}",
new { id = RouteParameter.Optional });
In questo caso, presumo che si desideri richiamare i controller API utilizzando una url come questa: /AreaName/Api/ControllerName/Id
.
Io di solito memorizzo i controller API Web all'interno di una cartella Api
all'interno della cartella area, ma non importa dove li mettete. Tieni conto che i controller API si troveranno ovunque si trovino e, se utilizzi lo stesso nome per loro in aree diverse, otterrai conflitti: vengono trovati dal nome della classe, non dal qualificato (namespace) nome.
In poche parole: non esiste un vero supporto per le aree, ma è possibile includerle nelle proprie cartelle all'interno delle aree e renderle disponibili su URL che assomigliano a quelli dei controller MVC all'interno delle aree.
Sostenere gli spazi dei nomi di percorso
Che cosa succede se si desidera avere controllori Web API con lo stesso nome in diversi settori? Se si desidera veramente fornire un supporto reale per le aree ai controller API Web, è necessario implementare e registrare un numero personalizzato IHttpControllerSelector.
di avere una buona spiegazione, e un esempio di implementazione qui: ASP.NET Web API: Using Namespaces to Version Web APIs
Questo esempio utilizza gli spazi dei nomi per il controllo delle versioni, ma il codice può essere leggermente modificato per sostenere aree namespace.
Grazie. Si scopre che noth! Mia ha funzionato perché ho registrato il mio/api/percorso dopo il percorso predefinito, che stava catturando tutte le chiamate API –
Posso avere 2 Global.asax per entrambi i siti WebAPI e asp.net 4? – Cris
Compagno, hai reso la mia giornata! Grazie mille. – Rikki