我目前正在尝试实施一个简单的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";
}
}
一旦我通过电子邮件添加内容它似乎无法正常工作,我已经尝试过为该方法提供自定义路由,但不幸的是它似乎无法正常工作。任何建议都会很棒。
答案 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()
}
希望这会有所帮助。