Swashbuckle 5 and multipart / form-data files

I'm stuck trying to get Swashbuckle 5 to generate full help pages for ApiController with a Post request using the multipart / form-data options. The help page for the action appears in the browser, but there is no information about the parameters passed in the form. I created an operation filter and included it in SwaggerConfig, a web page that includes URI parameters, return type, and other information derived from XML comments displayed on browser help pages; however, nothing is specified in the operating parameter parameter, and the help page does not contain information about the parameters.

Something is missing for me. Are there any suggestions that I might have missed?

Operation Filter Code:

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" } }; } } } 
+5
source share
1 answer

I assume you figured out what your problem was. I was able to use your published code to create the perfect "swagger ui" interface complete with file [BROWSE...] controls file [BROWSE...] .

I changed the code a bit, so it applies when it detects my preferred attribute ValidateMimeMultipartContentFilter stolen from Damien Bond . So my slightly modified version of your class looks like this:

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

Here is my Swagger interface: enter image description here

FWIW:

My NuGets

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

Swagger configuration example

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

All Articles