Stützflächen in den Web-API-URLs
Sie müssen einfach Registrieren Sie die Web-API-Route.
Diese Route muss jedoch vor den anderen Routen registriert werden. Ist dies nicht der Fall, werden die Anforderungen an die Web-API fälschlicherweise so behandelt, als wären sie eine MVC-Aktion.
Wenn Sie Gebiete verwenden, müssen Sie berücksichtigen, dass die Registrierung für die Routen der Gebiete in der Regel vor der Registrierung der Strecken außerhalb des Gebiets erfolgt. ICH.e, in Global.asax Application_Start
haben Sie diese Zeilen Code, in dieser Reihenfolge:
AreaRegistration.RegisterAllAreas();
// ...
RouteConfig.RegisterRoutes(RouteTable.Routes);
Die erste Methode Aufruf der RegisterArea
Methode von jeder xxxAreaRegistration
Klasse gefunden aufrufen wird. Und innerhalb dieser Konfiguration werden Sie in der Regel etwas wie dieses:
context.MapRoute(
"AreaName_default",
"AreaName/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
Wenn Sie Controller Web-API haben in diesem Bereich, müssen Sie die Web-API-Route vor diesem hinzufügen, etwa so:
context.Routes.MapHttpRoute("AreaName_WebApiRoute",
"AreaName/Api/{controller}/{id}",
new { id = RouteParameter.Optional });
In diesem Fall nehme ich an, dass Sie Ihre API-Controller mit einer URL wie folgt aufrufen möchten: /AreaName/Api/ControllerName/Id
.
Normalerweise speichern ich die Web-API-Controller in einem Ordner Api
im Bereich Ordner, aber es spielt keine Rolle, wo Sie sie platzieren. Berücksichtigen Sie, dass die API-Controller immer dort zu finden sind, wo sie sind. Wenn Sie denselben Namen für sie in verschiedenen Bereichen verwenden, erhalten Sie Konflikte: Sie werden nach dem Klassennamen und nicht nach dem voll qualifizierten Namen (Namespaced) gefunden. Name.
In wenigen Worten: Es gibt keine echte Unterstützung für Bereiche, aber Sie können sie in ihre eigenen Ordner innerhalb der Bereiche aufnehmen und sie auf URLs zur Verfügung stellen, die denen von MVC-Controllern in Bereichen ähneln.
Unterstützung Route Namespaces
Was ist, wenn Sie Web-API-Controller mit dem gleichen Namen in verschiedenen Bereichen haben? Wenn Sie Web API Controller wirklich unterstützen möchten, müssen Sie eine benutzerdefinierte IHttpControllerSelector implementieren und registrieren.
Sie haben eine gute Erklärung, und eine Beispielimplementierung hier: ASP.NET Web API: Using Namespaces to Version Web APIs
Dieses Beispiel Namespace für die Versions verwendet, aber der Code leicht modifiziert werden kann, um Bereiche Namespaces zu unterstützen.
Danke. Es stellt sich heraus, dass nichts von meiner Arbeit funktioniert, weil ich meine/api/route nach der Standardroute registriert habe, die alle API-Aufrufe aufzeichnete –
Kann ich 2 Global.asax für WebAPI und asp.net 4 Site haben? – Cris
Kumpel, du hast meinen Tag gemacht! Vielen Dank. – Rikki