36 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			36 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 
								 | 
							
								using Microsoft.OpenApi.Models;
							 | 
						||
| 
								 | 
							
								using Swashbuckle.AspNetCore.SwaggerGen;
							 | 
						||
| 
								 | 
							
								using Microsoft.AspNetCore.Http;
							 | 
						||
| 
								 | 
							
								using System.Reflection;
							 | 
						||
| 
								 | 
							
								using System.Linq;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace FutureMailAPI.Helpers
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /// <summary>
							 | 
						||
| 
								 | 
							
								    /// Swagger文件上传操作过滤器
							 | 
						||
| 
								 | 
							
								    /// </summary>
							 | 
						||
| 
								 | 
							
								    public class FileUploadOperationFilter : IOperationFilter
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        public void Apply(OpenApiOperation operation, OperationFilterContext context)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            var fileUploadMime = "multipart/form-data";
							 | 
						||
| 
								 | 
							
								            if (operation.RequestBody == null || !operation.RequestBody.Content.Any(x => x.Key.Equals(fileUploadMime, StringComparison.InvariantCultureIgnoreCase)))
							 | 
						||
| 
								 | 
							
								                return;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            var fileParams = context.MethodInfo.GetParameters()
							 | 
						||
| 
								 | 
							
								                .Where(p => p.ParameterType == typeof(IFormFile) || 
							 | 
						||
| 
								 | 
							
								                           (p.ParameterType.IsClass && p.ParameterType.GetProperties().Any(prop => prop.PropertyType == typeof(IFormFile))))
							 | 
						||
| 
								 | 
							
								                .ToList();
							 | 
						||
| 
								 | 
							
								                
							 | 
						||
| 
								 | 
							
								            if (!fileParams.Any())
							 | 
						||
| 
								 | 
							
								                return;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            operation.RequestBody.Content[fileUploadMime].Schema.Properties =
							 | 
						||
| 
								 | 
							
								                fileParams.ToDictionary(k => k.Name!, v => new OpenApiSchema()
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    Type = "string",
							 | 
						||
| 
								 | 
							
								                    Format = "binary"
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |