3

私のコントローラーの 1 つは、異なる 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);
}

ユーザーからすべてのロールを削除するという1つの条件を除いて、正常に機能します。その場合、送信されるjsonは

{Id: 1, Roles:[]}

その後、 aをuserinfo.Roles != null返すため、到達することはありません。false_repository.UpdateRolesForUser(user.UserName,roles);

Roles:[]私の質問: aと「true null」の違いを検出する方法は? またはのような機能はありますhasexists

-----更新----- このコントローラーはApiControllerで、コードはPUTアクションにあります。したがって、すべてのタイプの json がこの単一のアクションを入力する必要があります。それ以外の場合は、さまざまなアクションに対して Ajax 呼び出しを行うことができれば非常に便利です。

4

1 に答える 1

0

このために 2 つのコントローラー アクションを作成します。パスワードの更新アクションとロールの更新アクション。これにより、コントローラーのアクションがクリーンアップされ、物事が簡素化されます。

Update Roles メソッドを呼び出し、Roles[] が NullOrEmpty の場合、クライアントの意図を推測するのではなく、ユーザーがロールを持っていないことがわかります。

別の方法として、空の配列と null 値を区別するカスタム モデル バインダーを作成することもできます。

于 2012-08-07T15:50:34.070 に答える