我使用以下简化方法获得了一个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
}
文件上载未记录,因为它不是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)