Non so perché si vorrebbe fare questo e certamente non consiglierei di instradare tutto attraverso un controller, tuttavia si potrebbe ottenere questo come segue. Supponendo che si sta sempre e solo intenzione di avere una risorsa con un id opzionale tue chiamate, aggiungere questo al vostro WebApiConfig:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{resource}/{id}",
defaults: new { controller = "SuperDuper", id = RouteParameter.Optional }
);
}
}
quindi definire il metodo di controllo come segue:
public class SuperDuperController : ApiController
{
public IHttpActionResult Get(string resource, int? id = null)
{
return Ok();
}
}
Si avrebbe bisogno di decidere su un appropriato IHttpActionResult
da restituire per ogni diverso tipo di risorsa.
alternativa mediante l'attributo di routing, garantire che config.MapHttpAttributeRoutes()
è presente nel vostro WebApiConfig e aggiungere i seguenti attributi per il metodo di controllo:
[RoutePrefix("api")]
public class SuperDuperController : ApiController
{
[Route("{resource}/{id?}")]
public IHttpActionResult Get(string resource, int? id = null)
{
return Ok();
}
}
fonte
2015-07-06 09:43:40
Potresti essere interessato a http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection –