为什么REST API会调用错误的方法?

时间:2016-05-18 19:24:19

标签: asp.net asp.net-mvc

我的API控制器中有2个get方法,一个不接受任何参数,另一个接受整数参数。

API页面的路径为/api/contact。当我在此处导航时,页面会按预期显示。

但是,当我将路径更改为/api/contact/4以尝试调用接受整数参数的get方法时,代码只调用不带任何参数的相同get方法。我通过输入断点和调试来了解这一点。出了什么问题?

public PhoneInfo[] Get()
{
    return contactRepository.GetAllContacts();
}

public PhoneInfo[] Get(int phn)
{
    return contactRepository.GetMessages(phn.ToString());
}

1 个答案:

答案 0 :(得分:3)

WebApi 基于反射工作,这意味着您的global.asax / routing配置中的花括号{vars}必须与方法中的相同名称匹配。

默认情况下,您的global.asax将如下所示:

RouteTable.Routes.MapHttpRoute(name: "DefaultApi",
                     routeTemplate: "api/{controller}/{id}",
                     defaults: new { id = System.Web.Http.RouteParameter.Optional }); 

因此,为了匹配上面id作为var存在的url是api/contact/{id}的方法,该方法需要声明如下:

   public string Get(int id)
       return "test";
   }

在您的示例中,您正在将参数的默认名称从id更改为phn,导致WebApi无法找到您的方法。

另一种选择是使用RouteAttribute

 [Route("api/contact/{phn}"), HttpGet]
 public string Get(int phn)
   return "another value";
 }