5

ApiExplorer にリクエスト サンプルを自動生成させる方法はありますか?

私は使用してみました:

config.SetActualResponseType(typeof(SomeType), "ControllerName", "Post"); 

HelpPageConfig.csで、しかし2つの問題が発生しました:

  1. 特定のコントローラーとアクションの特定のタイプを定義する必要があり、新しいコントローラー\タイプが追加された場合にコードの追加\変更を必要としない、より一般的なものを探しています。

  2. コントローラー/アクションごとに 1 つの型しか使用できないため、要求本文で2 つの複合型を受け取るアクションの完全な要求サンプルを生成できません。

これらの問題を解決/アプローチする方法についてのアイデアはありますか?

4

1 に答える 1

8

OP のコメントでKiran Challaが述べたように、サンプルの自動生成は Help Pages パッケージの一部であり、ApiExplorer インターフェイスではありません。

質問 1 については、複合オブジェクトが使用されている場所での例を定義しようとしています。これは、ヘルプ ページ構成の SetSampleObjects メソッドを介して行います。たとえば、これは私の HelpPageConfig.Register メソッドからのものです。

config.SetSampleObjects(new Dictionary<Type, object>
{
    {typeof(CompositeType1), ModelExamples.GenerateExample<CompositeType1>()},
    {typeof(CompositeType2), ModelExamples.GenerateExample<CompositeType2>()},
    {typeof(CompositeType3), ModelExamples.GenerateExample<CompositeType3>()},
});

ここで、ModelExamples.GenerateExample は、指定された型のサンプル オブジェクトを作成するために使用する静的メソッド/クラスであり、このセクションをクリーンで簡潔に保ちます。上記により、ヘルプ ページのドキュメントでは、CompositeType1、CompositeType2、および CompositeType3 の戻り値の型に対して生成された例が使用されます。

これにより、質問 2 が発生します。次のような複数の複合型で構成される戻り値の型について話していると思います。

List<CompositeType1>

また

Tuple<CompositeType1,CompositeType2>

ヘルプ ページ ロジックは、モデルを使用するか一般的な例を生成するかを決定する前に、戻り値の型全体をチェックするだけなので、上記のようにモデルを生成するだけでは十分ではありません。したがって、次のようなエントリを追加する必要があります。

config.SetSampleObjects(new Dictionary<Type, object>
{
    {
        typeof(List<CompositeType1>),
        ModelExamples.GenerateExample<List<CompositeType1>>()
    },
    {
        typeof(Tuple<CompositeType1,CompositeType2>),
        ModelExamples.GenerateExample<Tuple<CompositeType1,CompositeType2>>()
    },
});

ここで、戻り値の型のいずれかに HttpResponseMessage を使用している場合は、次のように config.SetActualResponseType() を使用します。

config.SetActualResponseType(
    typeof(List<CompositeType1>), 
    "Foo",
    "ApiMethodA");
config.SetActualResponseType(
    typeof(Tuple<CompositeType1,CompositeType2>), 
    "Bar",
    "ApiMethodB");

TL;DR / 結論: config.SetSampleObjects と config.SetActualResponseType を組み合わせると、ヘルプ ページの自動生成ドキュメントで一般的にどのようなサンプル オブジェクトが表示されるかをカスタマイズし、各メソッドの応答がどのサンプル オブジェクトを指定するかを指定できます。使用する。

2016 編集コメントへの返信。ModelExamples は、指定された型のサンプル オブジェクトを作成しているだけです。これには多くの方法がありますが、ここでは 1 つの方法を示します。

public static class ModelExamples
{
    public static T GenerateExample<T>()
    {
        var retval = default(T);

        if (typeof(T) == typeof(ActionResult))
        {
            var value = ActionResult.Success;
            retval = (T)(object)value;
        }

        // ... whatever other types you handle go here ...

        return retval;
    }
}
于 2013-11-13T17:20:46.967 に答える