3

我的一个控制器接受不同的 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返回 a false_repository.UpdateRolesForUser(user.UserName,roles);因此永远不会到达。

我的问题:如何检测 aRoles:[]和“真空”之间的区别?有类似hasor的功能exists吗?

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

4

1 回答 1

0

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

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

或者,您可以编写一个自定义模型绑定器,将空数组与空值区分开来。

于 2012-08-07T15:50:34.070 回答