4

私は ASP.NET Web API を使用しており、API のドキュメントを便利に自動的に生成しますが、意味をなさないものもあります。

以下のスクリーンショットを例に取ります。

スクリーンショット

これはGETID によるユーザーへのエンドポイントであり、このセクションでは、コントローラー アクションに注釈Resource Descriptionがあるため、ユーザー モデルのプロパティを示すテーブルを示しています。[ResponseType(typeof(User))]

まず、実際のコントローラー アクションでは、Password機密情報を公開しないように、結果をユーザーに表示する前にプロパティを削除しています。そのため、セクションに示されている表Resource Descriptionは正しくありません。API が返さないフィールドを返しているということです。

次に、列の下に、モデルAdditional Informationに沿った検証ルールが表示されます。便利ですが、このエンドポイントはユーザー用ではなくユーザーUser用であるため、この場合はまったく関係ありません。GETPOST

それで、私の質問は、このResource Descriptionテーブルをカスタマイズして、返されるフィールドを自分で指定し、EF 検証を非表示にするにはどうすればよいですか?

現在、コントローラーのアクションに次のようにコメントしています。

/// <summary>
/// Get a single user identified by ID.
/// </summary>
/// <param name="userId">The ID of the user.</param>
/// <returns>A data collection about the user.</returns>
[ResponseType(typeof(User))]
[Route("api/v1/users/{userId}", Name="GetUser")]
[HttpGet]
public IHttpActionResult GetUser(int userId)
{
    // ...
}

///また、プロジェクトをビルドするときにこれらのコメントからビルドされる XML ファイルからドキュメントを読み取るようにヘルプ ページを構成しました。

ありがとう!

4

1 に答える 1

1

従来の MVC アプリケーションでは、ビュー モデルはコントローラーからビュー エンジンに返されるモデルです。Web API アプリケーションでは、ビュー モデルは API コンシューマーに公開されるモデルです。

現状では、データ モデルをビュー モデルとして使用しています。

ビュー モデルをデータ モデルから分離する理由は多数あります。

  1. セキュリティ: 機密データ (パスワードなど) が誤って公開されないようにする
  2. Web API インターフェイスとデータベース データのデータの違い (たとえば、enumWeb API インターフェイスint内とデータベース内)。
  3. 内部データ構造が変更された場合でも、Web API インターフェイスの一貫性を維持するのに役立ちます。
  4. GETPOSTメソッドの間でデータを区別できます。たとえば、POSTレコードの作成日など、特定のデータはおそらく ing の時点で決定されます。そのデータは から返される可能性がありGETますが、POST.

理由 1 と 2 に該当します。

あなたの解決策は次のとおりです。

  1. ビュー モデルとして新しいクラスを作成します。これで、Userデータ モデル クラスが作成されました。クラスを作成しますUserViewModel(任意の名前を付けます)。
  2. ユーザーに公開する必要があるこのクラスにメンバーを追加します。ケースに入れないPasswordでください。
  3. 自動生成されたヘルプに表示するのに適した注釈を追加します。
  4. Userクラスからクラスにデータをコピーし、コントローラーからUserViewModelクラスを返しUserViewModelます。
于 2015-04-19T18:39:21.657 に答える