我不知道您为什么要这样做,我当然不建议通过一个控制器路由所有内容,但是您可以通过以下方式实现此目的。假设您在调用中只会有一个带有可选 id 的资源,请将其添加到您的 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 }
);
}
}
然后定义你的控制器方法如下:
public class SuperDuperController : ApiController
{
public IHttpActionResult Get(string resource, int? id = null)
{
return Ok();
}
}
您需要确定一个合适的IHttpActionResult 来为每种不同类型的资源返回。
或者使用属性路由,确保 config.MapHttpAttributeRoutes() 存在于您的 WebApiConfig 中,并将以下属性添加到您的控制器方法中:
[RoutePrefix("api")]
public class SuperDuperController : ApiController
{
[Route("{resource}/{id?}")]
public IHttpActionResult Get(string resource, int? id = null)
{
return Ok();
}
}