2017-07-12 8 views
0

.NET Core WebAPIプロジェクトでSwashbuckle.AspNetCore(nuGetパッケージマネージャで入手できる最新バージョン)を使用して、自分のアクションのパラメータとして使用する複雑なオブジェクトの必須メンバーをマークする方法を見つけるのに問題があります。 。スワッシュバックル複合オブジェクトメンバの装飾

アクションパラメータにrequired = trueフラグを追加するカスタムIOperationFilterを実装しましたが、明らかに複雑なオブジェクト定義を通過しないため、すべてのメンバーがオプションとしてマークされています。私が取得したい何

はこれです:

definitions: 
    ComplexObjectParameters: 
    description: 'my complex object parameter' 
    type: object 
    required: ['parameter1', 'parameter2'] 
    properties: 
     parameter1: 
     type: string 
     parameter2: 
     type: string 
     parameter3: 
     type: string 

あなたは私がこれを実装する方法任意のアイデアを持っていますか?

EDIT:私の問題を実証するデモプロジェクトがここにあります:https://github.com/albator1932/ComplexObjects

+0

このような何かのトラブルシューティング完全な画像なしでは非常に困難です... 問題を再現する簡単なプロジェクトをGitHubで作成できますか? – HelderSepu

+0

はい、当然あります:https://github.com/albator1932/ComplexObjects プロジェクトを実行して/ swagger/URLに行くと、入力パラメータは必須(良い)とマークされていますが、すべてのメンバーオプション(および応答の一部)としてマークされます。 – albator1932

+0

私はあなたにプルリクエストを送った... – HelderSepu

答えて

0

IDocumentFilterを使用し、必要とされる分野に[必須]を追加します。

internal class AddComplexObjectRequiredParameter : IDocumentFilter 
{ 
    public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context) 
    { 
     if (swaggerDoc.Definitions != null) 
     { 
      if (swaggerDoc.Definitions["ComplexObjectParameters"].Required == null) 
       swaggerDoc.Definitions["ComplexObjectParameters"].Required = new List<string>(); 
      foreach (var field in typeof(ComplexObjectParameters).GetFields()) 
      { 
       if (Attribute.IsDefined(field, typeof(RequiredAttribute))) 
        swaggerDoc.Definitions["ComplexObjectParameters"].Required.Add(field.Name); 
      } 
     } 
    } 
} 
+0

ありがとう、それは動作します! しかし、それは私がこれを達成したかったのと全く同じではありません。私はかなりのオブジェクトを持っていて、いくつかは多くのプロパティを持っていますので、このようにリストするのは面倒です。 オブジェクトのプロパティに何らかの装飾を追加する方法はありますか? – albator1932

+0

デコレータ[必須]は行く方法です、それはうまくいくはずです!それを壊すswashbuckleのバグがあります。 – HelderSepu

+0

メンバーをハードコードしないように私の提案を編集しましたが、もはや面倒な作業ではありません... – HelderSepu

関連する問題