我有一个webApi UserController和一个名为Register的方法。路由是通过Route属性完成的。最初它接受POST请求,我将其更改为GET只是为了查看是否被击中。我有兴趣访问的Register方法是:
[Authorize]
[ApiController]
[Route("api/[controller]/[action]")]
public class UsersController : ControllerBase
{
[AllowAnonymous]
//[HttpGet("register")]
public IActionResult Register()
{
// map dto to entity
UserDto userDto = null;
var user = _mapper.Map<User>(userDto);
try
{
// save
_userService.Create(user, userDto.Password);
return Ok();
}
catch (AppException ex)
{
// return error message if there was an exception
return BadRequest(new { message = ex.Message });
}
}
}
我尝试了 [Route(“ api / [controller] / [action]”)] 和 [Route(“ api / [controller]”)]] 与 http://localhost:55392/api/user 和 http://localhost:55392/api/user/register 相对应的请求,但都是徒劳的。
相同的路由属性组合可以与默认的webApi ValueController一起很好地工作。
我在哪里做错了什么?
答案 0 :(得分:1)
您不能在直接路由中使用参数controller
。请尝试以下路线:
[Route("api/users/{action}")]
这应该有效。
答案 1 :(得分:0)
您仍然需要在操作上包括Http{Verb}
,以便其映射到相应的HTTP Verb请求。
[Authorize]
[ApiController]
[Route("api/[controller]/[action]")]
public class UsersController : ControllerBase {
//GET api/users/register
[AllowAnonymous]
[HttpGet]
public IActionResult Register() {
//...
}
//POST api/users/register
[AllowAnonymous]
[HttpPost]
public IActionResult Register([FromBody]RegisterModel model) {
//...
}
}
引用Token replacement in route templates ([controller], [action], [area])