[英]Getting 404 when calling a post method on Web API
我有一个具有标准GET,POST和Delete操作的API控制器。
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
//Get
[HttpPost]
public async Task Post([FromBody] TestUser testUser, string tempPassword, role = "Guest")
{
}
}
现在,我使用以下命令添加新操作:
[HttpPost]
[Route("api/[controller]/UpdateRole")]
public async Task Post(string email, List<string> roles)
{
}
当我尝试使用邮递员调用API时,
类型:POST端点: http:// localhost / api / users / UpdateRole
要求正文:
{
"email":"something@mail.com",
"roles":["S1","s3"]
}
但是我得到了404
作为回应。 在服务器上,我可以看到,
无需阅读整个请求正文即可完成应用程序。
由于RouteAttribute
工作原理,您的总体路由似乎是/api/Users/api/Users/UpdateRoute
。
[Route("a")]
public class MyController
{
[Route("a/b")]
public IActionResult MyAction()
{
}
}
上面的路由为/a/a/b
因为在这种情况下,操作路由会附加到控制器路由。
您的选择是:
[Route("[controller]/[action]")]
并删除操作路由,在这种情况下,上例将变为/MyController/MyAction
[Route("b")]
,在这种情况下,完整路线将为a/b
[Route("/a/b")]
,在这种情况下,控制器路径将被忽略,而完整路径将只是/a/b
。 有关路由的更多信息,请参见此处 。
至于null
值问题,ASP.NET Core当前期望将email
和roles
用作查询字符串参数。 相反,您应该为请求主体创建一个模型:
public class MyModel
{
public string Email { get; set; }
public List<string> Roles { get; set; }
}
然后更改您的操作以接受它:
[HttpPost]
[Route("api/[controller]/UpdateRole")]
public async Task Post([FromBody]MyModel model)
{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.