我的一个控制器接受不同的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:[]
和“真空”之间的差异?是否有像has
或exists
这样的函数?
- - - - - - - - 更新
此控制器为ApiController
,代码位于PUT
操作中。因此,所有类型的json都必须进入这个单一动作。否则,我们可以非常方便地对不同的操作进行Ajax调用。
答案 0 :(得分:0)
我会为此创建两个控制器操作。更新密码操作和更新角色操作。这将清理您的控制器操作并简化操作。
如果您调用Update Roles方法并且Roles []是NullOrEmpty,那么您将不会认为用户没有角色,而不是猜测客户端的意图是什么。
在替代方案中,您可以编写一个自定义模型绑定器,以区分空数组和空值。