这是我发现支持额外的GET方法以及支持常规REST方法的最佳方法。将以下路由添加到WebApiConfig:
routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"d+" });routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}");routes.MapHttpRoute("DefaultApiGet", "Api/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });routes.MapHttpRoute("DefaultApiPost", "Api/{controller}", new {action = "Post"}, new {httpMethod = new HttpMethodConstraint(HttpMethod.Post)});我通过下面的测试类验证了此解决方案。我能够在下面的控制器中成功命中每种方法:
public class TestController : ApiController{ public string Get() { return string.Empty; } public string Get(int id) { return string.Empty; } public string GetAll() { return string.Empty; } public void Post([FromBody]string value) { } public void Put(int id, [FromBody]string value) { } public void Delete(int id) { }}我确认它支持以下请求:
GET /TestGET /Test/1GET /Test/GetAllPOST /TestPUT /Test/1DELETE /Test/1
注意 ,如果多余的GET操作不是以“ Get”开头,则可能需要向该方法添加HttpGet属性。



