0

シナリオ:

Userクラスには、プロパティのいくつかのグループがあります:password、、、。addresspreferenceroles

(1)ユーザーパスワード、(2)ユーザープロファイル、(3)ユーザーの役割を更新するには、さまざまなAjax呼び出しが必要です。

すべてのチュートリアルと例は、Userクラス全体を更新するための1つのPOSTアクションのみを示しています。私の質問は、クラスの一部のみを更新する方法です。

たとえば、ユーザーパスワードを更新する場合、次のようにします。

  1. ユーザー入力から新しいパスワードを収集するためのテキストボックスを表示します。
  2. 新しいパスワードとuserId({id = 3、newPassword = xxxxx}など)のみをWebAPIPOSTアクションにPOSTするAjax呼び出しを行います。
  3. このアクションでは、ユーザーのパスワードのみが更新されます。

1つの解決策:(考えるのが最も簡単)

  1. userIdを使用してアクションを呼び出し、GETユーザーのすべてのデータを取得します
  2. Webユーザー入力から取得した値でユーザーデータのパスワードを更新します
  3. POSTUserクラスのすべてのプロパティを含む更新されたデータを使用してアクションを呼び出します。
  4. このPOSTアクションにより、パスワードのみが変更されたことを知らなくても、データ全体が更新されます。

利点:POSTに必要なアクションは1つだけApiControllerです。

欠点:Ajaxを2回実行する必要があります。

POSTでは、1つのアクションで複数のアクションを実行できる可能性はありApiControllerますか?たとえばPostPassword(userId, password)、、、PostProfile(userId, profile)およびPostRoles(userId, roles)

このようにPostPassword、パスワードをに送信するためにのみ呼び出しますApiController。クライアント側では、Ajax呼び出しは1つだけです。更新を行うのはサーバー上です。もちろん、インターネットを介して転送されるデータが削減されるという利点もあります。

可能であれば、すべての異なるPOST呼び出しを対応するアクションに向ける正しい方法は何ApiControllerですか?

助けてください。皆さん、ありがとうございました。

4

2 に答える 2

2

ほとんどの場合、多忙なポストアクションを持つ必要はないと思います。典型的なケースは、消費者がユーザーを編集する必要があることです。したがって、編集フォームに表示するには、最初にユーザーデータを読み込む必要があります。編集後、コンシューマーは[保存]ボタンをクリックしてデータを送信し、APIコントローラーでPOSTアクションを呼び出すことができます。

ケースが異なる場合は、値型にnull許容プロパティが必要です。次に、コントローラーでチェックする必要があるロジックは、プロパティがnullの場合、このプロパティをデータベースに更新しないことです。

于 2012-08-02T18:01:46.087 に答える
1

コントローラのアクション名ごとに設定できる投稿アクションは1つだけです。つまり、あなたはできません

// NOT VALID:
public ActionResult UpdateUser(string newPassword) { }
public ActionResult UpdateUser(List<string> newRoles) { }

ただし、アクションのパラメーターは確かにnull許容可能です。特定のプロパティが特定のHTTPリクエストで提供されていない場合、コントローラーのプロパティの値はnullになります。

// VALID:
public ActionResult UpdateUser(string newPassword, List<string> newRoles) 
{ 
    if (newPassword != null) { } // It must have been supplied
    if (newRoles != null) { } // It must have been supplied
}

または、UpdatePassword(...)、UpdateAddress(...)、...などのユースケースの1つをそれぞれ処理する関連するコントローラーアクションを設定することもできます。

于 2012-08-02T17:41:54.423 に答える