2016-08-25 31 views
5

Çok satırlı/form-data parametrelerini kullanarak bir Post isteği içeren bir ApiController için tam yardım sayfaları oluşturmak için Swashbuckle 5'i almaya çalışıyorum. Eylem için yardım sayfası tarayıcıda gelir, ancak formda geçirilen parametreler hakkında bilgi dahil değildir. Bir işletme filtresi oluşturdum ve bunu, SwaggerConfig'te, URI parametrelerini içeren web sayfasında, dönüş türünde ve tarayıcı yardım sayfalarında gösterilen XML yorumlarından türetilen diğer bilgilerde etkinleştirdim; Ancak, işlem filtresinde parametrelerle ilgili hiçbir şey belirtilmemiştir ve yardım sayfası parametreler hakkında hiçbir bilgi içermemektedir.Swashbuckle 5 ve multipart/form-data Yardımlar

Bir şeyleri kaçırmam gerekir. Neleri kaçırdığım hakkında bir öneri var mı?

Operasyon filtre:

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

Denetleyicinin yönteminin kodunu soruna ekleyebilir misiniz? – venerik

+0

İşletim filtresini swagger konfigürasyonuna bağladığınızı umuyoruz. –

cevap

1

ben size sorunun ne olduğunu anladım sanırım. Ben file [BROWSE...] giriş kontrolleri ile tam bir mükemmel görünümlü 'swagger ui' arayüzü yapmak için yayınlanan kodunuzu kullanabildim.

Yalnızca kodunuzu biraz değiştirdim, böylece tercih ettiğimözniteliğini stolen from Damien Bond tespit ettiğinde uygulanır. Böylece, sınıfının benim biraz değiştirilmiş bir sürümü şuna benzer: enter image description here

FWIW:

Benim NuGets

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

Swagger

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" 
      } 
     }; 
     } 
    } 
} 

İşte benim Swagger UI var Yapılandırma örneği

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"); 
       }); 
    } 


}