Web Api已经定义了一个名为'Get'的成员,其参数类型与现有成员相同。

3
public class UsersController : ApiController
{
    // GET api/companies/{company_id}/users/{user_id}
    public object Get(int company_id, int user_id)
    {
       ...
    }

    // GET api/companies/{company_id}/plants/{plant_id}/users
    public IEnumerable<object> Get(int company_id, int plant_id)
    {
       ...
    }
}

第一种方法应该返回公司的单个用户部分 第二种方法应该返回公司和工厂的用户列表
错误:类型“...”已经定义了一个具有相同参数类型的成员“Get”
是否可能避免Web Api将第二个Get解释为重新定义?
如果查看http://aspnetwebstack.codeplex.com/wikipage?title=Attribute%20routing%20in%20Web%20API,在场景3中使用[HttpGet(“…”)]注释。
public class MoviesController : ApiController
{
    [HttpGet("actors/{actorId}/movies")]
    public Movie Get(int actorId) { }
    [HttpGet("directors/{directorId}/movies")]
    public Movie Get(int directorId) { }
}

但在我的情况下 [HttpGet(...)] 错误:“System.Web.Http.HttpGetAttribute”不包含一个带有1个参数的构造函数。

不是“web api”在抱怨,应该是C#编译器在抱怨。你不能在同一个类中使用相同名称、相同参数类型的两个方法。返回类型在重载决议中没有任何作用。 - Damien_The_Unbeliever
那个场景3的例子似乎也是错误的,原因正如文章下面第一条评论所指出的那样。 - Damien_The_Unbeliever
我希望让他们知道C#实际上有两种不同的重载方法。 - Gavello
1个回答

7

我认为您需要给您的获取函数命名:

public class UsersController : ApiController
{
    // GET api/companies/GetByUser/{company_id}/{user_id}
    public object GetByUser(int company_id, int user_id)
    {
       ...
    }

    // GET api/companies/GetByPlanet/{company_id}/{plant_id}
    public IEnumerable<object> GetByPlanet(int company_id, int plant_id)
    {
       ...
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接