Asp.net Web API未读入正文

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)

我正在尝试通过Web API向控制器发送列表。我通过邮递员将其作为JSON发送。我100%确信JSON格式正确。但是,
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的构造函数,它们采用不同的对象。我没有的是一个没有参数的构造函数。愚蠢的错误。。。如果有羞耻按钮,我会点击它。