Контроллер WebApi недоступен, кроме контроллера значения - PullRequest
0 голосов
/ 09 октября 2018

У меня есть 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]")] и [Маршрут («api / [controller]»)]] с запросом, соответствующим http://localhost:55392/api/user и http://localhost:55392/api/user/register, но все напрасно.

То же самоеКомбинация атрибутов маршрута хорошо работает со стандартным webApi ValueController.

Где и что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вам все равно нужно включить Http{Verb} в действии, чтобы оно отображалось в соответствующем HTTP-запросе глагола для действия.

[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) {
        //...
    } 
}

Ссылка Замена токена в шаблонах маршрутов ([контроллер], [действие], [область])

0 голосов
/ 09 октября 2018

Нельзя использовать параметр controller по прямому маршруту.Вместо этого попробуйте следующий маршрут:

[Route("api/users/{action}")]

Это должно работать.

...