アップデート: 私はこれはバグが原因であれば疑問に思い始めている:重複パラメータ出力
https://github.com/domaindrivendev/Swashbuckle/issues/590
しかし、回避策は私の問題を解決するために存在していないよう推薦し。
私はSwashbuckleを使用して、C#ASP.NET Web APIプロジェクトのAPIドキュメントを生成しています。 「foo」と「bar」に設定するオプションのパラメータ(パラメータ2)に設定し、必要なパラメータ(PARAM1)で
/endpoint/items/123/foo?param2=bar
:
私の目標は、次のように有効なURLを可能にすることです。私は両方のパラメータが単一のC#パラメータオブジェクトの中に含まれていることを望みます。 (param3のような他のオプションのパラメータもあります)。いくつかのエンドポイントは同一のパラメータを使用します。パラメータを表す単一のオブジェクトが必要です。
スワッガー/スワッシュバックルの詳細はほとんどがブラックボックスで、これを理解することはできません。パラメータリストに重複があります。問題再現する
サンプルコード:第二の方法によれ
// This endpoint is generating documentation the way I would like.
[HttpGet]
[Route("endpoint1/items/{id}/{param1}")]
public string GetDataForParameters(int id, string param1, string param2 = null, string param3 = null)
{
return string.Format("Params: {1}, {2}, {3}", id, param1, param2, param3);
}
// This endpoint has the structure I would like, but I get duplicates for param1 in the documentation.
[HttpGet]
[Route("endpoint2/items/{id}/{param1}")]
public string GetDataForParameters(int id, [FromUri(Name = "")]MyParams myParams)
{
return string.Format("Params: {1}, {2}, {3}", id, myParams.Param1, myParams.Param2, myParams.Param3);
}
public class MyParams
{
public string Param1 { get; set;}
public string Param2 { get; set;}
public string Param3 { get; set;}
}
を、Iは、単一のオブジェクト内のパラメータを受け取ります。しかし、Swaggerは "param1"の重複したエントリを表示します。
スクリーンショット:Swagger duplicate parameter
がどのように闊歩/ Swashbuckleは、「パラメータ1」の2番目の項目が表示されないことができますか?
この構造を持つ理由は、異なるタイプのデータを返す複数のエンドポイントがあることですが、共通のパラメータを使用するためです。 いくつかのパラメータは必須であり(IDのprt)、URLにそれらを含めるにはクエリ文字列にオプションのパラメータを含めます。 共通パラメータオブジェクトに必須パラメータとオプションパラメータの両方を含めることをお勧めします。
Visual Studio 2015で作成されたサンプルコードが更新されました。1.デフォルトのASP.NET Web APIプロジェクト。生成されたValuesController.csに上記のコードを追加します。インストールされたパッケージSwashbuckle 5.3.1 +の依存関係。
秒ルータは 'クエリ文字列としてparam1'だけでなく、' MyParams'のメンバーが含まれています。これが理由かもしれない。 –
これは正しいです - 私はURLパスにparam1を指定し、クエリ文字列にはparam2を指定します。これを明確にするために質問を更新します。 – PMBjornerud
更新:回避策としてJsonIgnoreを提案する私自身の答えを削除しました。これにより、Swaggerは正しく見えるようになりましたが、さらに検査すると、生成されたURLが '/ endpoint2/items/123/{Param1}?param1 = foo&param2 = bar'になることに気付きました。私はまだこれに対する解決策を探しています。 – PMBjornerud