使用最小 WEB API 实现文件上传的 Swagger 支持,需要完成以下步骤:
- 添加 Swagger 支持
在 Startup.cs
文件的 ConfigureServices
方法中,添加 Swagger 支持的代码:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" });
});
在 Configure
方法中,启用 Swagger:
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "API V1");
});
- 添加文件上传方法
添加文件上传方法的代码如下:
[HttpPost]
[Route("UploadFile")]
[Consumes("multipart/form-data")]
public async Task<IActionResult> UploadFile(IFormFile file)
{
if (file != null && file.Length > 0)
{
var fileName = file.FileName;
var filePath = Path.Combine(@"C:\Files\", fileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
return Ok(new { message = "File uploaded successfully!", fileUrl = filePath });
}
return BadRequest();
}
- 添加 Swagger 上传方法
在 ConfigureServices
方法中,添加上传文件的 Swagger 说明:
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" });
c.OperationFilter<AddFileParamTypesOperationFilter>();
c.OperationFilter<AddFileParamNameOperationFilter>();
在 SwaggerConfig.cs
文件中,添加 Swagger 上传文件的 Filters:
public class AddFileParamTypesOperationFilter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
if (operation.Parameters != null)
{
foreach (var parameter in operation.Parameters)
{
var parameterType = parameter.GetType();
if (parameterType == typeof(NonBodyParameter) &&
parameter.In.Equals("formData", StringComparison.OrdinalIgnoreCase) &&
parameter.Type.Equals("file", StringComparison.OrdinalIgnoreCase))
{
parameter.Type = "file";
parameter.Format = null;
parameter.In = "formData";
}
}
}
}
}
public class AddFileParamNameOperationFilter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
if (operation.Parameters != null)
{
foreach (var parameter in operation.Parameters)
{
var parameterType = parameter.GetType();
if (parameterType == typeof(NonBodyParameter) &&
parameter.In.Equals("formData", StringComparison.OrdinalIgnoreCase) &&
parameter.Type.Equals("file", StringComparison.OrdinalIgnoreCase))
{
parameter.Name = "file";
}
}
}
}
}
示例1:
使用 POSTMAN 进行上传文件操作,
请求地址:https://localhost:5001/UploadFile
请求方式:POST
文件参数名:file
方法说明:上传指定文件到本地的 C:\Files 文件夹中,上传成功后返回 “File uploaded successfully!” 和文件路径。
示例2:
通过 Swagger 进行上传文件操作,
进入地址 https://localhost:5001/swagger/index.html
点击 API
-> POST /UploadFile
-> Try it out
按钮
在Choose Files
下拉框中选择需要上传的文件
点击 Execute
按钮
上传成功后,点击 Response body
中的 Model
按钮,查看路径信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用最小 WEB API 实现文件上传的Swagger支持 - Python技术站