c# - 使用 Swashbuckle Swagger 上传文件

标签 c# asp.net-core swagger

我有一个带有 Swagger 3.0 的 ASP.NET Core 2 应用程序,我想通过从 Swagger UI 上传文件来测试 POST 操作。

文件 uploader Controller :

[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 中的所有字段都消失了,取而代之的是上传文件控件,因此我可以选择“试用”按钮,选择一个文件,但在按下“执行”后,我收到以下错误: enter image description here

Web api 本身不会崩溃,也不会抛出任何错误。我在调试期间注意到 - 已到达 FileUploadController 的构造函数,但未触发 FileUpload 方法。

最佳答案

你在表单中的键应该匹配方法中的参数,在你的过滤器中重命名它:

operation.Parameters.Add(new NonBodyParameter()
            {
                Name = "uploadedFile",
                In = "formData",
                Description = "Upload File",
                Required = true,
                Type = "file"
            });

关于c# - 使用 Swashbuckle Swagger 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51677044/

相关文章:

c# - asp.net core DI 只注入(inject)单例,作用域和 transient 不工作

java - API 描述未显示在 Swagger UI 中

java - Spring Boot 应用程序,已弃用 swagger-ui ApiInfo() 方法。需要替代方案

c# - 授权策略的依赖注入(inject)

php - DarkaOnline Swagger-php 生成错误的界面

c# - 无法使用 ConfigurationManager 在 C# .NET Core 单元测试项目中读取 app.config

C# lambda IN 子句错误

c# - "Select All"使用 Blazor 的复选框

c# - OData V4 客户端代码生成器和处理 401 响应

asp.net-core - .NET 核心自定义和默认绑定(bind)相结合