我是否可以指定Web-Api方法需要Swashbuckle / Swagger生成的页面/ json中的文件

问题描述 投票:1回答:1

我使用以下简化方法获得了一个Web-Api来获取文件:

[HttpPut("Test/{id}")]
public IActionResult PutTest(string id)
{
    Stream file = Request.Body;
    //rest of method
    return StatusCode(201);
}

它工作得很好,虽然在创建的SwaggerUI页面中没有提到期望文件在体内的方法。有没有办法在生成的SwaggerUI页面中指定方法所需的文件?

我可以使用以下代码模拟输入:

var content = new StreamContent(new FileStream("C:\temp\test.txt", FileMode.Open));

using (var client = new HttpClient())
using (var response = client.PutAsync(url, content))
{
    var result = response.Result;
    //more code   
}
c# asp.net-core swagger swagger-ui swashbuckle
1个回答
1
投票

文件上载未记录,因为它不是action方法中的参数。 Swagger无法知道你在行动中做了什么。无论如何,试图以这种方式处理文件上传都是不好的做法。您可以使用IFormFile,但只有在您的请求正文编码为multipart/form-data时才有效。如果您正在处理JSON或基本上任何符合FromBody的资格,那么您需要绑定到byte[]

[HttpPut("Test/{id}")]
public IActionResult PutTest(string id, byte[] file)
{
    //rest of method
    return StatusCode(201);
}

现在,由FromBody属性应用的自动[ApiController]仅适用于类类型,因此我不确定它是否适用于byte[]。如果没有,只需:

public IActionResult PutTest(string id, [FromBody]byte[] file)
© www.soinside.com 2019 - 2024. All rights reserved.