public void Apply(Operation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
{
return;
}
var formFileParams = context.ApiDescription.ActionDescriptor.Parameters
.Where(x => TypeExtensions.IsAssignableFrom(x.ParameterType, typeof(IFormFile)))
.Select(x => x.Name)
.ToList();;
var formFileSubParams = context.ApiDescription.ActionDescriptor.Parameters
.SelectMany(x => x.ParameterType.GetProperties())
.Where(x => x.PropertyType.IsAssignableFrom(typeof(IFormFile)))
.Select(x => x.Name)
.ToList();
var allFileParamNames = formFileParams.Union(formFileSubParams);
if (!allFileParamNames.Any())
{
return;
}
var paramsToRemove = new List <IParameter>();
foreach (var param in operation.Parameters)
{
paramsToRemove.AddRange(from fileParamName in allFileParamNames where param.Name.StartsWith(fileParamName + ".") select param);
}
paramsToRemove.ForEach(x => operation.Parameters.Remove(x));
foreach (var paramName in allFileParamNames)
{
var fileParam = new NonBodyParameter
{
Type = "file",
Name = paramName,
In = "formData"
};
operation.Parameters.Add(fileParam);
}
operation.Consumes = new List <string>()
{
"multipart/form-data"
};
}