接口 web api Swagger 文件上传

原文:https://github.com/domaindrivendev/Swashbuckle/issues/120 原文:https://www.cnblogs.com/yaosj/p/10343185.html


1、FormAttribute,添加一个特性类,用于标识该方法是否支持文件上传

[AttributeUsage(AttributeTargets.Method)]
public sealed class FormAttribute : Attribute
{
    public string Name { get; private set; }
    public string Description { get; private set; }

    public FormAttribute(string name, string description)
    {
        Name = name;
        Description = description;
    }
}

2、HttpAuthHeaderFilter,在swagger中,显示文件上传

public class HttpAuthHeaderFilter : IOperationFilter
{
    void IOperationFilter.Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        if (operation.parameters == null)
        {
            operation.parameters = new List<Parameter>();
        }

        var requestAttributes = apiDescription.GetControllerAndActionAttributes<FormAttribute>();
        foreach (var attr in requestAttributes)
        {
            operation.parameters.Add(new Parameter
            {
                description = attr.Description,
                name = attr.Name,
                @in = "formData",
                required = true,
                type = "file"
            });
            operation.consumes.Add("multipart/form-data");
        }
    }
}

3、SwaggerConfig,注入到swagger的配置文件中

取消注释 c.OperationFilter<AssignOAuth2SecurityRequirements>();; 修改为 c.OperationFilter<HttpAuthHeaderFilter>();

4、HomeApiController,创建一个测试

[HttpPost, AllowAnonymous, Form("ImportImage", "Upload image file")]
public string Upload()
{
    return HttpContext.Current.Request.Files[0].FileName;
}

猜你喜欢

转载自www.cnblogs.com/guxingy/p/12918434.html