如何在MVC控制器中区分json null和空json数组?

时间:2012-08-07 15:39:35

标签: c# asp.net-mvc json

我的一个控制器接受不同的json数据来更新我的用户信息。

有些json是更新密码

{Id:1, NewPassword:'xxx'}

有些json用于更新用户的角色

{Id:1, Roles:['admin', 'guest']}

我在控制器中设置的是检测NewPassword和Roles中是否有值。

if (userinfo.NewPassword != null)
{
    _repository.SetNewPassword(user.UserName, serinfo.NewPassword);                    
}
if (userinfo.Roles != null) 
{                    
    string[] roles = userinfo.Roles.ToArray();
    _repository.UpdateRolesForUser(user.UserName,roles);
}

除了一个条件外,它工作正常:当我从用户中删除所有角色时。在这种情况下,发送的json是

{Id: 1, Roles:[]}

然后userinfo.Roles != null会返回false,因此永远无法访问_repository.UpdateRolesForUser(user.UserName,roles);

我的问题:如何检测Roles:[]和“真空”之间的差异?是否有像hasexists这样的函数?

- - - - - - - - 更新 此控制器为ApiController,代码位于PUT操作中。因此,所有类型的json都必须进入这个单一动作。否则,我们可以非常方便地对不同的操作进行Ajax调用。

1 个答案:

答案 0 :(得分:0)

我会为此创建两个控制器操作。更新密码操作和更新角色操作。这将清理您的控制器操作并简化操作。

如果您调用Update Roles方法并且Roles []是NullOrEmpty,那么您将不会认为用户没有角色,而不是猜测客户端的意图是什么。

在替代方案中,您可以编写一个自定义模型绑定器,以区分空数组和空值。