9

目標:ユーザーが HTTP GET 要求のクエリ文字列にパラメーターを渡すことができるようにする REST API を設計しています。何かのようなもの

http://fake.api.com/search?api-key=1235&term=car&rows=10

実装:サーバー側には、コントローラー アクション メソッドがクエリ文字列を解析する必要がないように、API キー、用語、行の 3 つのパラメーターを受け取り、それらを C# オブジェクトに変換するモデル バインダーがあります。したがって、コントローラーアクションメソッドのシグネチャは次のようになります

public IHttpActionResult Get(RequestObject request)

問題: Swagger で発生しているのは、ドキュメントとテスト ハーネスを生成するときに、入力パラメーターを request.api-key、request.term、および request.rows としてリストすることです。これは、サーバーから取得する JSON がこれらの値の前にオブジェクト名を付けているためです。したがって、Swagger UI を使用して HTTP GET 要求を実行しようとすると、次のような URL が作成されます。

http://fake.api.com/search?request.api-key=1235&request.term=car&request.rows=10

これは、サーバーに対する誤った要求です。これで、モデル バインダーを簡単にスマートにして、"要求" を無視することができます。一部ですが、それはこの問題を修正する逆方向の方法のようです。

質問:サーバー側で Swashbuckle -> Swagger によって生成された JSON をカスタマイズして、この特定のオブジェクトのパラメーター名にオブジェクト名のプレフィックスが付けられないようにするにはどうすればよいですか? Swashbuckle 拡張 API が公開している ISchemaFilter と IDocumentFilter の両方を調べましたが、これを行うためのクリーンな方法は見当たりません。可能かもしれませんが、その場合は例が役立ちます。

4

2 に答える 2