Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 除值控制器外,无法访问WebApi控制器_C#_Asp.net Core_Asp.net Core Routing - Fatal编程技术网

C# 除值控制器外,无法访问WebApi控制器

C# 除值控制器外,无法访问WebApi控制器,c#,asp.net-core,asp.net-core-routing,C#,Asp.net Core,Asp.net Core Routing,我有一个webApi用户控制器和一个名为的方法寄存器。路由是通过路由属性完成的。最初它是接受POST请求的,我更改它只是为了看看它是否被击中。我感兴趣的注册方法是: [Authorize] [ApiController] [Route("api/[controller]/[action]")] public class UsersController : ControllerBase { [AllowAnonymous] //[HttpGet("register")]

我有一个webApi用户控制器和一个名为的方法寄存器。路由是通过路由属性完成的。最初它是接受POST请求的,我更改它只是为了看看它是否被击中。我感兴趣的注册方法是:

 [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 });
        }
    } 
  }
[授权]
[ApiController]
[路由(“api/[controller]/[action]”)
公共类UsersController:ControllerBase
{
[异名]
//[HttpGet(“寄存器”)]
公共IActionResult寄存器()
{
//将数据映射到实体
UserDto UserDto=null;
var user=\u mapper.Map(userDto);
尝试
{
//拯救
_创建(用户,userDto.Password);
返回Ok();
}
捕获(外观例外)
{
//如果出现异常,则返回错误消息
返回BadRequest(新的{message=ex.message});
}
} 
}
我尝试了[Route(“api/[controller]/[action]”)和[Route(“api/[controller]”)和请求对应的,但都没有成功

相同的路由属性组合适用于默认的webApi ValueController


我哪里做错了,哪里做错了?

您不能在直接路由中使用参数
控制器
。请尝试以下路线:


[路由(“api/users/{action}”)]


这应该是可行的。

您仍然需要在操作中包含
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) {
        //...
    } 
}

Reference

Reference[HttpPost]包含在寄存器方法的顶部。根据您的提问,您声明您正在通过更改以获取来测试它。在示例中还注释了一个HttpGet。这个答案正好与原始问题中的答案相符。如果你想发帖,同样的方法也可以。只需替换必要的属性