WebAPI 2.0 Multiple在单个控制器上运行

时间:2015-01-26 10:53:50

标签: asp.net-web-api

我目前正在尝试实施一个简单的WebAPI 2.0控制器,以便从中央表中获取和检索用户。

着眼于实施:

GetUserByName(string userName)
GetUserByID(int userId)
GetUserByEmail(string email)

使用路由我已经能够使api与GetById和GetByName一起使用。我还在控制器级别添加了一个路由前缀

到目前为止,代码看起来像这样,目前我还没有在API控制器中完成任务,我只想测试正确的方法被击中。

[RoutePrefix("api/user")]
public class UserController : ApiController
{
    [Route("")]
    [HttpGet]
    public IEnumerable<User> Get()
    {
        return new List<User>();
    }

    // GET: api/Users/5
    [Route("{id:int}")]
    public User Get(int id)
    {
        return new User();
    }

    [Route("{id}/PasswordHash")]
    [HttpGet]
    public string PasswordHash(int id)
    {
       return "test";
    }

    [Route(Name = "/{userName:alpha}")]
    public User GetByName(string userName)
    {
        return new User();
    }

    [Route(Name = "/GetByEmail/{email}")]
    [HttpGet]
    public User GetByEmail(string email)
    {
        return new User()
    }

    // POST api/<controller>
    [HttpPost]
    [Route("")]
    public string Post([FromBody]User value)
    {
        return "test";
    }
}

一旦我通过电子邮件添加内容它似乎无法正常工作,我已经尝试过为该方法提供自定义路由,但不幸的是它似乎无法正常工作。任何建议都会很棒。

1 个答案:

答案 0 :(得分:2)

您已设置路由的名称而不是路由本身,并且由于两个方法都具有相同的签名和一个字符串变量,因此您可以解决问题,因此请将代码更改为:

[Route("/{userName:alpha}")]
    public User GetByName(string userName)
    {
        return new User();
    }

    [Route("/GetByEmail/{email}")]
    [HttpGet]
    public User GetByEmail(string email)
    {
        return new User()
    }

希望这会有所帮助。