Lev*_*kon 8 c# parameterbinding asp.net-web-api asp.net-web-api-routing
使用标准路线:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
通过这些行动:
public class ValuesController : ApiController
{
// GET api/values
public string GetAll()
{
return "all";
}
// GET api/values/5
public string GetById(int id)
{
return "single";
}
// GET api/values?ids=1&ids=2
public string GetByIds([FromUri] int[] ids)
{
return "multiple";
}
Run Code Online (Sandbox Code Playgroud)
并向/ api/values发出请求,我得到以下异常:
Multiple actions were found that match the request:
System.String GetAll() on type MvcApplication4.Controllers.ValuesController
System.String GetByIds(Int32[]) on type MvcApplication4.Controllers.ValuesController
Run Code Online (Sandbox Code Playgroud)
我一直在试着寻找解决方案.我相信GetAll和GetByIds操作在这里被认为是Multiple,但它们不是因为GetByIds具有不同的签名.
有没有解决这个问题,不涉及添加{action}到路线?
感谢大家的意见和建议.在踢开选项之后,我发现这样做的唯一方法是组合GetAll和GetByIds操作并切换id的长度.
public class ValuesController : ApiController
{
// GET api/values/5
public string GetById(int id)
{
return "single";
}
// GET api/values
// GET api/values?ids=1&ids=2
public string GetByIds([FromUri] int[] ids)
{
switch (ids.Length)
{
case 0:
return "all";
default:
return "multiple";
}
}
Run Code Online (Sandbox Code Playgroud)