使用标准路线:

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

通过以下操作:
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";
    }

并请求/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

我一直在努力寻找解决方案。我认为 GetAll GetByIds 操作在此处被视为多个,但并不是因为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";
        }
    }

关于c# - WebApi使用GetAll()和GetByIds(int [] ids)找到了多个 Action ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16021717/

10-10 18:05