2016-08-25 4 views
5

私は、multipart/form-dataパラメータを使用してPostリクエストを使ってApiControllerの完全なヘルプページを生成するためにSwashbuckle 5を取得しようとしています。アクションのヘルプページがブラウザに表示されますが、フォームに渡されるパラメータに関する情報は含まれていません。私は操作フィルタを作成し、それをSwaggerConfigで有効にしました。これはURIパラメータを含むWebページ、戻り値の型およびブラウザのヘルプページに表示されるXMLコメントから得られるその他の情報です。ただし、操作フィルターにはパラメーターについては何も指定されておらず、ヘルプ・ページにはパラメーターに関する情報は含まれていません。Swashbuckle 5とmultipart/form-data HelpPages

私は何かが欠けている必要があります。私が逃したかもしれないことについて何か提案がありますか?

オペレーションフィルターコード:

public class AddFormDataUploadParamTypes : IOperationFilter 
{ 
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)   { 
     if (operation.operationId == "Documents_Upload") 
     { 
      operation.consumes.Add("multipart/form-data"); 
      operation.parameters = new[] 
      { 
       new Parameter 
       { 
        name = "anotherid", 
        @in = "formData", 
        description = "Optional identifier associated with the document.", 
        required = false, 
        type = "string", 
        format = "uuid" 

       }, 
       new Parameter 
       { 
        name = "documentid", 
        @in = "formData", 
        description = "The document identifier of the slot reserved for the document.", 
        required = false, 
        type = "string", 
        format = "uuid" 
       }, 
       new Parameter 
       { 
        name = "documenttype", 
        @in = "formData", 
        description = "Specifies the kind of document being uploaded. This is not a file name extension.", 
        required = true, 
        type = "string" 
       }, 
       new Parameter 
       { 
        name = "emailfrom", 
        @in = "formData", 
        description = "A optional email origination address used in association with the document if it is emailed to a receiver.", 
        required = false, 
        type = "string" 
       }, 
       new Parameter 
       { 
        name = "emailsubject", 
        @in = "formData", 
        description = "An optional email subject line used in association with the document if it is emailed to a receiver.", 
        required = false, 
        type = "string" 
       }, 
       new Parameter 
       { 
        name = "file", 
        @in = "formData", 
        description = "File to upload.", 
        required = true, 
        type = "file" 
       } 
      }; 
     } 
    } 
} 
+0

コントローラーのメソッドのコードを質問に追加できますか? – venerik

+0

あなたはswagger設定で操作フィルタを添付していたと思います。 –

答えて

1

私はあなたの問題が何であったかを考え出したと推定します。投稿されたコードを使用して、file [BROWSE...]入力コントロールを備えた完璧な「swagger UI」インターフェイスを作成することができました。

自分のコードを少し修正しました。私の好みのValidateMimeMultipartContentFilter属性stolen from Damien Bondが検出されたときに適用されます。このように、あなたのクラスの私の少し変更したバージョンは、次のようになります enter image description here

FWIW:

マイNuGets

<package id="Swashbuckle" version="5.5.3" targetFramework="net461" /> 
<package id="Swashbuckle.Core" version="5.5.3" targetFramework="net461" /> 

闊歩

public class AddFormDataUploadParamTypes<T> : IOperationFilter 
{ 
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) 
    { 
     var actFilters = apiDescription.ActionDescriptor.GetFilterPipeline(); 
     var supportsDesiredFilter = actFilters.Select(f => f.Instance).OfType<T>().Any(); 

     if (supportsDesiredFilter) 
     { 
      operation.consumes.Add("multipart/form-data"); 
      operation.parameters = new[] 
      { 
      //other parameters omitted for brevity 
      new Parameter 
      { 
       name = "file", 
       @in = "formData", 
       description = "File to upload.", 
       required = true, 
       type = "file" 
      } 
     }; 
     } 
    } 
} 

は、ここに私の闊歩するUIです構成例

public class SwaggerConfig 
{ 
    public static void Register() 
    { 
     var thisAssembly = typeof(SwaggerConfig).Assembly; 

     GlobalConfiguration.Configuration 
      .EnableSwagger(c => 
       { 

        c.Schemes(new[] { "https" }); 

        // Use "SingleApiVersion" to describe a single version API. Swagger 2.0 includes an "Info" object to 
        // hold additional metadata for an API. Version and title are required but you can also provide 
        // additional fields by chaining methods off SingleApiVersion. 
        // 
        c.SingleApiVersion("v1", "MyCorp.WebApi.Tsl"); 


        c.OperationFilter<MyCorp.Swashbuckle.AddFormDataUploadParamTypes<MyCorp.Attr.ValidateMimeMultipartContentFilter>>(); 

       }) 
      .EnableSwaggerUi(c => 
       { 

        // If your API supports ApiKey, you can override the default values. 
        // "apiKeyIn" can either be "query" or "header"             
        // 
        //c.EnableApiKeySupport("apiKey", "header"); 
       }); 
    } 


} 
関連する問題