2012-12-04 34 views
2

我想一些自定义的方法添加到我的控制器的请求,但这样做的时候,所以我遇到了以下错误:未找到多个操作中发现匹配

http://localhost/api/process/asdf 

多个动作匹配请求

我错过了我的WebApiConfig,控制器或我的网址?

这里是我的WebApiConfig:

public static class WebApiConfig { 
    public static void Register (HttpConfiguration config) { 
     config.Routes.MapHttpRoute(
      name: "ControllerOnly", 
      routeTemplate: "api/{controller}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
     config.Routes.MapHttpRoute(
      name: "ControllerAndId", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
     config.Routes.MapHttpRoute(
      name: "ControllerAndActionGet", 
      routeTemplate: "api/{controller}/{action}", 
      defaults: new { action = "Get"} 
     ); 
     config.Routes.MapHttpRoute(
      name: "ControllerAndActionAndIdGet", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { action = "Get", id = RouteParameter.Optional } 
     ); 
    } 
} 

这里是我的过程控制器:

public class ProcessController : BaseApiController 
{ 
    // GET api/process 
    public List<Process> Get() 
    { 
     return null; 
    } 

    [HttpGet] 
    [ActionName("asdf")] 
    public List<Process> asdf() { 
     return null; 
    } 

    [HttpGet] 
    [ActionName("fdsa")] 
    public List<Process> fdsa (int id) { 
     return null; 
    } 

    // GET api/process/5 
    public List<Process> Get (long id) 
    { 
     return null; 
    } 

    // POST api/process 
    public void Post ([FromBody]string value) 
    { 
    } 

    // PUT api/process/5 
    public void Put (int id, [FromBody]string value) 
    { 
    } 

    // DELETE api/process/5 
    public void Delete (int id) 
    { 
    } 

} 

回答

2

找到这个歧义,最好的办法是使用routedebugger.dll并找到该路线造成的问题。