我的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());
}
答案 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";
}