除Value控制器外,无法访问WebApi Controller

时间:2018-10-09 15:42:16

标签: c# asp.net-core asp.net-core-routing

我有一个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一起很好地工作。

我在哪里做错了什么?

2 个答案:

答案 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])

相关问题