我有一个带有 Swagger 3.0 的 ASP.NET Core 2 应用程序,我想通过从 Swagger UI 上传文件来测试 POST 操作。
文件上传控制器:
[ApiController]
public class FileUploadController : ApiControllerBase
{
private readonly IFileUploader _fileUploader;
public FileUploadController(IFileUploader fileUploader, ILogger<FileUploadController> logger) : base(logger)
{
_fileUploader = fileUploader;
}
[HttpPost]
[Route(nameof(UploadFile))]
public FileUploadResult UploadFile(IFormFile uploadedFile)
{
return _FileUploader.UploadFile(Request.Form.Files[0]);
}
}
阅读 Swagger 文档和其他主题,我发现我需要自定义 IOperationFilter,所以这就是我想出的:
public class FileUploadOperationFilter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
if (operation.OperationId.ToLower() == "apifileuploaduploadfilepost")
{
operation.Parameters.Add(new NonBodyParameter()
{
Name = "file",
In = "formData",
Description = "Upload File",
Required = true,
Type = "file"
});
operation.Consumes.Add("multipart/form-data");
}
}
}
它在 Swagger 启动类中注册:
options.OperationFilter<FileUploadOperationFilter>();
因此,来自 IFormFile 的所有字段都消失了,而是有上传文件控件,因此我可以选择“试用”按钮,选择一个文件,但是在按“执行”后,我收到以下错误:
web api 本身不会崩溃,也不会抛出任何错误。我在调试期间注意到的 -FileUploadController
达到了 的构造函数但没有触发 FileUpload 方法。
largeQ
喵喔喔
冉冉说
相关分类