Asp.net Web API未读入正文
我正在尝试通过Web API向控制器发送列表。我通过邮递员将其作为JSON发送。我100%确信JSON格式正确。但是,Asp.net Web API未读入正文,asp.net,asp.net-web-api,Asp.net,Asp.net Web Api,我正在尝试通过Web API向控制器发送列表。我通过邮递员将其作为JSON发送。我100%确信JSON格式正确。但是,usersList仍然以null结束。我也尝试过不使用[FromBody]属性 控制器名称为UserController,因此url为api/user/。使用的方法是Put public IHttpActionResult Put([FromBody]List<UserVm> usersList) { if (usersList.Count > 0)
usersList
仍然以null
结束。我也尝试过不使用[FromBody]
属性
控制器名称为UserController
,因此url为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
}]
}
]
public IHttpActionResult Put([FromBody]列表用户列表)
{
如果(usersList.Count>0)
{
_UpdateUserRoles(usersList);
返回Ok();
}
返回请求();
}
公共类用户虚拟机
{
公共int Id{get;set;}
公共字符串用户名{get;set;}
公共字符串名称{get;set;}
公共字符串标记{get;set;}
公共字符串Icao{get;set;}
公共字符串刷新标记{get;set;}
公共int ExpiresIn{get;set;}
公共列表角色{get;set;}
}
[
{
“id”:0,
“用户名”:“banji”,
“姓名”:“巴吉”,
“令牌”:“bajz”,
“国际民航组织”:“波菲”,
“刷新令牌”:“konna”,
“expiresin”:0,
“角色”:[{
“id”:0,
“部门”:“建筑署”,
“isadmin”:错误
}]
},
{
“id”:0,
“用户名”:“banji”,
“姓名”:“巴吉”,
“令牌”:“bajz”,
“国际民航组织”:“波菲”,
“刷新令牌”:“konna”,
“expiresin”:0,
“角色”:[{
“id”:0,
“部门”:“建筑署”,
“isadmin”:错误
}]
}
]
非常感谢您对我做错了什么的建议。我刚刚复制了您在这里发布和尝试的内容。它很好用 以及守则:
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是幂等的,因此它应该始终具有完全相同的返回。这就是为什么在创建资源的过程中,它经常被用来做更新。我只是复制了你在这里发布和尝试的内容。它很好用 以及守则:
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是幂等的,因此它应该始终具有完全相同的返回。这就是为什么在创建资源的同时,它更多地被用来进行更新。我找到了解决问题的方法。我忘记了有一个无参数构造函数。我找到了问题的解决方案。我忘了有一个无参数构造函数。你能粘贴UserVm类代码吗?另外,请检查这是否有帮助:我也将添加json。尝试在json变量名上使用大写字母,以便它们与c#类匹配。我找到了解决方案。我有两个用于ViewModel的构造函数,它们采用不同的对象。我没有的是一个没有参数的构造函数。愚蠢的错误。。。如果有羞愧按钮,我会点击它。你能粘贴UserVm类代码吗?另外,请检查这是否有帮助:我也将添加json。尝试在json变量名上使用大写字母,以便它们与c#类匹配。我找到了解决方案。我有两个用于ViewModel的构造函数,它们采用不同的对象。我没有的是一个没有参数的构造函数。愚蠢的错误。。。如果有羞耻按钮,我会点击它。