代码之家  ›  专栏  ›  技术社区  ›  NotFound

我可以指定web api方法需要swashbuckle/swagger生成的page/json中的一个文件吗?

  •  1
  • NotFound  · 技术社区  · 5 年前

    我得到了一个Web API,其获取文件的简化方法如下:

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

    虽然在 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   
    }
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Chris Pratt    5 年前

    文件上传没有记录,因为它不是action方法中的参数。大摇大摆的人不知道你在做什么。无论如何,尝试以这种方式处理文件上载是不好的做法。你可以使用 IFormFile ,但只有当请求主体编码为 multipart/form-data . 如果你处理的是JSON或者基本上符合 FromBody ,然后需要绑定到 byte[] :

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

    现在,自动 来自身体 应用于 [ApiController] 属性只适用于类类型,因此我不确定它是否适用于 字节[] . 如果没有,只需:

    public IActionResult PutTest(string id, [FromBody]byte[] file)