Quando si utilizza ASP.NET Web API Aiuto Pagina e il relativo MVC.ApiExplorer ho percorsi validi che sono accessibili via HTTP ancora non sono rilevati da ApiExplorer. Queste rotte si trovano solo quando viene utilizzata una regola di routing generale. L'utilizzo di una regola più specifica (insieme a quella generale) sembra nascondere i percorsi da ApiExplorer.percorsi validi non scoperti da MVC.ApiExplorer
In un caso di esempio di tre regole, due route si riferiscono a un'azione GET e POST su un metodo controller che non accetta parametri di query passa a MIA.
public class SomeControllerController : ApiController
{
[HttpPost] public HttpResponseMessage Post(PostObject value) { ... }
[HttpGet] public IEnumerable<DisplayObject> GetAll() { ... }
[HttpGet] public DisplayObject GetById(string id) { ... }
}
Quando si utilizza una regola di routing di
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
I percorsi vengono scoperti in modo appropriato da Api Explorer come
- POST: api/SomeController
- GET: api/SomeController
- GET: api/SomeController/{id}
ancora quando si aggiunge la regola meno generico e più significativo
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 restituisce solo
- GET: api/somecontroller/{id}
Qual è la causa alcuni dei miei percorsi non si trovano?
EDIT Link to Issue Report on ApiExplorer project page
Ho appena verificato la rimozione della regola "ApiDefault" e la regola "ApiSomeControllerDefault" rende effettivamente disponibili i percorsi una volta nascosti a ApiExplorer. – rheone
Come hai rimosso la regola ApiDefault? – user3654055