16

ヘルプページのサンプルジェネレーターに特定のタイプの特定のプロパティを無視させることは可能ですか?

たとえば、POSTリクエストとPUTリクエストの両方で、オブジェクトのリクエストメッセージとレスポンスメッセージに同じDTOを使用します。ユーザーがモデルをPOSTする(新しいレコードを作成する)場合、IDフィールドを指定する必要はありません。

ただし、作成されて新しいレコードが応答本文にシリアル化されると、IDフィールドが含まれ、クライアントに返されます。

したがって、POSTリクエストのサンプルでは、​​IDフィールドを表示したくありません。これは、POSTリクエストでは意味がないためです。

しかし、POST応答サンプルでは、​​IDフィールドを表示したいのですが...

ApiExplorerSettingsクラスまたはメソッドに適用できる属性があることを知っています...しかし、プロパティに類似したものはありますか?

このようなものは素晴らしいでしょう:

public class MyDTO
{
    [ApiExplorerSettings(IgnoreForRequestApi = true, IgnoreForResponseApi = false)]
    public int Id { get; set; }

    // Other properties omitted for brevity...
}
4

3 に答える 3

12

次のアノテーションを使用して、プロパティを世代から正常に非表示にしました。

[ApiExplorerSettings(IgnoreApi = true)]
于 2015-05-01T10:00:28.787 に答える
4

いいえ、プロパティに同様のオプションはありません。HelpPageは、アプリケーションで構成されたフォーマッターインスタンスを使用してサンプルをシリアル化します。ご想像のとおり、フォーマッターはこの知識を持ってはなりません。

回避策について:

a。HttpRequestMessageのSetSampleRequest拡張機能を使用して、特定のアクションのrequestsampleの生のサンプルを明示的に設定できます。* Areas \ HelpPage \ App_Start \HelpPageConfig.cs*のファイルでこれに関するいくつかの例を見ることができるはずです。

b。Areas \ HelpPage \ SampleGeneration \ HelpPageSampleGenerator.csファイルには、アプリケーションのフォーマッターインスタンスを使用してサンプルを書き込むWriteSampleObjectUsingFormatterというメソッドがあります。ここでは、通常のアプリケーションと同様の設定を持つ新しいフォーマッターインスタンスを作成し(実際のリクエストが行われたときにアプリケーションが通常反応する正確なシリアル化/逆シリアル化のセマンティクスを反映するように)、プロパティを非表示にする必要があります。をしたい。アプリケーションの通常の機能を妨げたくないので、新しいインスタンスを作成したいと思います。

例:Jsonの場合、新しいJsonフォーマッターインスタンスを作成し、プロパティを非表示にできるContractResolverを提供できます。このリンクを確認してください:http://james.newtonking.com/projects/json/help/html/ConditionalProperties.htm

Xmlの場合、IgnoreDataMember属性を使用せずに、また邪魔にならないようにプロパティを非表示にする方法がわかりません。

現在、オプション「a」は「b」よりも比較的単純な回避策として好んで使用します。

于 2013-02-27T17:39:56.977 に答える
1

DataContarctSerailizerASP.NET WEB APIは、JSONおよびXMLフォーマットにJson.NETを使用するため[JsonIgnore]、シリアル化に含めたくないプロパティに注釈を追加すると、問題なく機能するはずです。

于 2014-07-17T07:58:34.553 に答える