2016-09-20 15 views
-1

を使用してSwagger UIのモデルスキーマにデフォルトのリクエストデータを割り当てSwagger 6.0.0 with C#を使用してSwagger UIのモデルスキーマにデフォルトのリクエストデータを実装してください。Swagger 6.0.0-rc1-final

答えて

0

これを解消してより明確にします。

1)送信したリンクに似たサンプルのクラスタイプを保持するだけのRequestExampleAttributeクラスを作成する必要があります。

2)RequestExampleAttributeとアクションメソッドを飾る:

[RequestExample(typeof(MyRequestExample))] 

3)MyRequestExampleは、モデルに由来する単純なクラスであり、それはコンストラクタの例値が移入すべての特性を有している以外は

4)あなたのリンクのように操作フィルターを作成してください

5)操作フィルターで、属性を見つけてください(1つのみまたは1つでなければなりません):

RequestExampleAttribute exampleAttr = context.ApiDescription.GetActionAttributes().Where(x => x is RequestExampleAttribute).Cast<RequestExampleAttribute>().FirstOrDefault(); 

6)exampleAttrがnullの場合、戻り、そうでない場合、Activator.CreateInstanceを有するタイプ(のインスタンスアップ新しい)

7)がcontext.SchemaRegistry.Definitionsセット[0]。実施例インスタンスに作成されました。

object oExample = Activator.CreateInstance(exampleAttr.ExampleType); 

context.SchemaRegistry.Definitions[0].Example = oExample; 

8)それが動作するかどうかを確認...ない場合、それから読んでいない場合)9

9に進み... [0]。実施例、それはプロパティスキーマから読み出しています、あなたはすべてのプロパティを変更する必要がありますので:

context.SchemaRegistry.Definitions[0].Properties[x].Value.Example 

これはキーでプロパティ名を持つだけで辞書のキー/値のペアです。私がコードで行ったことは、辞書キーをループして、正規表現を使用して、手順6で作成したシリアル化されたインスタンスから値を取得することでした。私。 [文字列]、その後Value.Exampleにその文字列をコピー:あなたは「PROP1」を引き出すために正規表現を使用できるように

{ 
    "prop1" : "value1" 
} 

辞書通じますのでループ、最初のキーは、例えば「PROP1」になります小道具のために。

成功したリターンモデルが「簡単な」場所から読み込んで変更されるので、これを行う必要はありません。うまくいけば、リクエストも「簡単な」場所から引き出されることを願っています。

今すぐ確認してください。

+0

@Urao - 更新されました。 – SledgeHammer

+0

@Uraoどこからintとstringを取得していますか?ステップ#7では、context.SchemaRegistry.Definitions [0] .Example = oExample;両辺はオブジェクトです。この部分は機能しませんでしたか?あなたは8/9をする必要はないかもしれません。 SchemaRegistry.Definitions [0] .Properties [x] .Value.Ex十分なものもオブジェクトです。 – SledgeHammer

+0

ああ、申し訳ありません...私はデバッガを探していましたが、あなたはcontext.SchemaRegistry.Definitions.First()を実行することができます....(System.Linqを使用して)...ステップ9これまでのところ。 – SledgeHammer