我正在尝试通过Web API将List发送到我的控制器。我通过邮递员将其作为JSON发送。我100%确定JSON格式正确。 usersList
仍然null
结束。我也试过没有[FromBody]
属性。
控制器名称为UserController
,因此网址为api/user/
。使用的方法是Put
。
public IHttpActionResult Put([FromBody]List<UserVm> usersList)
{
if (usersList.Count > 0)
{
_userService.UpdateUserRoles(usersList);
return Ok();
}
return BadRequest();
}
public class UserVm
{
public int Id { get; set; }
public string UserName { get; set; }
public string Name { get; set; }
public string Token { get; set; }
public string Icao { get; set; }
public string RefreshToken { get; set; }
public int ExpiresIn { get; set; }
public List<Role> Roles { get; set; }
}
[
{
"id": 0,
"username": "banji",
"name": "baji",
"token": "bajz",
"icao": "poffe",
"refreshtoken": "konna",
"expiresin": 0,
"roles": [{
"id": 0,
"department": "asd",
"isadmin": false
}]
},
{
"id": 0,
"username": "banji",
"name": "baji",
"token": "bajz",
"icao": "poffe",
"refreshtoken": "konna",
"expiresin": 0,
"roles": [{
"id": 0,
"department": "asd",
"isadmin": false
}]
}
]
非常感谢有关我做错事的建议。
答案 0 :(得分:3)
我刚刚复制了您发布的内容并在此处尝试过。它工作正常。
代码:
entryComponents
邮递员数据看起来与您发布的相同:
你有默认的api路线吗?像:
public class UserVm
{
public int Id { get; set; }
public string UserName { get; set; }
public string Name { get; set; }
public string Token { get; set; }
public string Icao { get; set; }
public string RefreshToken { get; set; }
public int ExpiresIn { get; set; }
public List<Role> Roles { get; set; }
}
public class Role
{
public int Id { get; set; }
public string Department { get; set; }
public bool IsAdmin { get; set; }
}
public class UserController : ApiController
{
public IHttpActionResult Put([FromBody]List<UserVm> usersList)
{
if (usersList.Count > 0)
{
//_userService.UpdateUserRoles(usersList);
return Ok();
}
return BadRequest();
}
}
PS:使用put时使用/ resource / id是一个很好的做法。您说要使用给定的ID更改资源,或者您要创建具有该ID的资源。动词PUT是幂等的,所以它应该总是具有完全相同的回报。这就是为什么它更多地用于创建资源的更新。
答案 1 :(得分:0)
我找到了解决问题的方法。我忘记了一个无参数构造函数..