Bei der Verwendung von ASP.NET Web API Hilfe Page und die damit verbundene MVC.ApiExplorer Ich habe gültige Routen, die über http zugänglich sind noch nicht durch ApiExplorer entdeckt. Diese Routen werden nur gefunden, wenn eine allgemeine Routing-Regel verwendet wird. Die Verwendung einer spezifischeren Regel (in Verbindung mit der allgemeinen Regel) scheint die Routen vom ApiExplorer zu verbergen.Gültige Routen entdeckt nicht durch MVC.ApiExplorer
In einem Beispielfall von drei Regeln beziehen sich zwei Wege auf eine GET- und eine POST-Aktion auf einer Controller-Methode, die keine Abfrageparameter verwenden, gehen MIA.
public class SomeControllerController : ApiController
{
[HttpPost] public HttpResponseMessage Post(PostObject value) { ... }
[HttpGet] public IEnumerable<DisplayObject> GetAll() { ... }
[HttpGet] public DisplayObject GetById(string id) { ... }
}
Wenn eine Routing-Regel der Verwendung
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
Die Routen werden in geeigneter Weise durch Api Explorer entdeckt als
- POST: api/SomeController
- GET: api/SomeController
- GET: api/SomeController/{id}
noch bei der Zugabe der weniger generisch und sinnvolle Regel
routes.MapHttpRoute(
name: "ApiSomeControllerDefault",
routeTemplate: "api/somecontroller/{id}",
defaults: new
{
controller = "SomeController",
id = RouteParameter.Optional
}
);
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
Api Explorer gibt nur
- GET: api/somecontroller/{id}
Was ist die Ursache einige meiner Routen nicht zu finden?
EDIT Link to Issue Report on ApiExplorer project page
Ich habe gerade verifiziert, die "ApiDefault" -Regel zu entfernen und die "ApiSomeControllerDefault" -Regel zu lassen, macht die einmal verborgenen Routen für ApiExplorer verfügbar. – rheone
Wie haben Sie die ApiDefault-Regel entfernt? – user3654055