NSwag Wep Api 2 multipart / form-data Атрибут / загрузка файла - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь настроить метод контроллера с помощью NSwag, где я могу загрузить файл multipart / form-data

    [HttpPost]
    [Route("{number:long}")]
    [ValidateMimeMultipartContentFilter]
    [SwaggerResponse(500, typeof(string), Description = "Error")]
    public async Task<IHttpActionResult> Upload(long number)
    {
             //My backend code for file upload
    }

Но я не могу загрузить файл через веб-интерфейс NSwag. Я думаю, что в ASP.NET Core у вас есть атрибут для этой проблемы, но как мне получить эту поддержку в Web Api 2

1 Ответ

0 голосов
/ 25 января 2019

NSwag не поддерживает загрузку файлов для Web API 2 из коробки, вам нужно создать операционный процессор, который создает параметр для загрузки файлов.

Я создал свой собственный операционный процессор

public class SwaggerFilChunkUploadOperationProcessor : IOperationProcessor
{
    public Task<bool> ProcessAsync(OperationProcessorContext context)
    {
        var data = context.OperationDescription.Operation.Parameters;

        //File upload
        data.Add(new SwaggerParameter()
        {
            IsRequired = true,
            Name =  "file",
            Description = "filechunk",
            Type = JsonObjectType.File,
            Kind = SwaggerParameterKind.FormData
        });

        //custom formdata (not needed for the file upload)
        data.Add(new SwaggerParameter()
        {
            IsRequired = true,
            Name = "file-name",
            Description = "the original file name",
            Type = JsonObjectType.String,
            Kind = SwaggerParameterKind.FormData
        });

        return Task.FromResult(true);
}

//defined as Attribute Usage, so you can use the attribute in your Controller
public class SwaggerFileChunkUploadAttribute : SwaggerOperationProcessorAttribute
{
    public SwaggerFileChunkUploadAttribute() : base(typeof(SwaggerFilChunkUploadOperationProcessor))
    {
    }
}

В вашем контроллере теперь вы можете использовать

   [ValidateMimeMultipartContentFilter]
   [SwaggerFileChunkUpload]
    public async Task<IHttpActionResult> Upload(long ordernumber)
    {
         //process your file here!
    }
...