.net core 2.1使用Postman对IFormFile进行“ POST”-应用程序完成,而无需读取整个请求正文

时间:2018-07-19 13:44:06

标签: c# post .net-core asp.net-core-2.0 iformfile

我正在使用dotnet核心WebAPI 2.1,但是找不到将图像发送到主体的方法。

控制器看起来像这样:

    [HttpPost("api/image")]
    public IActionResult Post([FromBody]IFormFile file)
    {
        var filePath = Path.GetTempFileName();
        if (file.Length > 0)
        {
            return Ok();
        }
        return BadRequest();
    }

这是我的邮递员电话: enter image description here

由于Kestrel失败,此呼叫从未结束 enter image description here

我已经尝试使用Consumes

[Consumes("application/json", "application/json-patch+json", "multipart/from-data")]

在邮递员中,我还将Content-Type设置为multipart / form-data

5 个答案:

答案 0 :(得分:2)

尝试这样做。在邮递员中使用您现在使用的相同请求。这只是粗略的样板方法,但是您可以理解。

此外,别忘了在邮递员中将请求的标头设置为:Content-Type:multipart / form-data

[HttpPost]
[Route("api/image")]
public async Task<IHttpActionResult> InsertNewMerchant()
{
        // your form data is here
             var formData = HttpContext.Current.Request.Form;
             HttpFileCollection files = HttpContext.Current.Request.Files;


            if (files.Count == 1)
            {
            // this is the file you need 
                var image = files[0];
                    // do something with the file
            }
    return StatusCode(System.Net.HttpStatusCode.Created);
}

答案 1 :(得分:1)

似乎Postman macOS application存在错误问题。当我使用postman chrome extension时,一切正常。

MacOS应用 MacOS app

Chrome扩展程序 enter image description here

答案 2 :(得分:0)

我尝试了并且成功了。也许您忘记做某事。 删除 [FromBody] 属性。

    [HttpPost("api/image")]
    public IActionResult Post(IFormFile file)
    {
        var filePath = Path.GetTempFileName();
        if (file.Length > 0)
        {
            return Ok();
        }
        return BadRequest();
    }

Postman会自动附加正确的 Content-Type ,在正文部分选择 form-data 选项,然后使用 file 键添加文件。

应该可以。

答案 3 :(得分:0)

我知道已经回答了,但是您似乎已经决定要解决的方法。您的端点或Postman请求都没有问题,我遇到了同样的问题,为我的操作系统安装本机Postman解决了问题https://www.getpostman.com/apps

答案 4 :(得分:0)

我找到了.Net Core 2.1 / 2.2 here

的解决方案

POST multiple files from POSTMAN

POST single file from POSTMAN

    [HttpPost]
    public async Task<IActionResult> UploadSingleFile([FromForm(Name = "file")] IFormFile file)
    {
        if (!ModelState.IsValid)
            return BadRequest(ModelState);
        var IDsList = new IDsList();

        try
        {
            var id = SaveFile(file);
            IDsList.Files.Add(new IDsList.FileInfo() { id = id, fileName = file.FileName });
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }

        return Content(JsonConvert.SerializeObject(IDsList), "application/json");
    }

    [HttpPost("UploadFiles")]
    public async Task<IActionResult> UploadFiles([FromForm(Name = "files")] ICollection<IFormFile> files)
    {
        if (!ModelState.IsValid)
            return BadRequest(ModelState);

        //var files = Request.Form.Files?.GetFiles("files");
        String message = String.Empty;
        int filesCounter = 0;
        var IDsList = new IDsList();

        foreach (var file in files)
        {
            if (file.Length == 0)
                message = message + $"errorDescription {file.FileName}\n";

            try
            {
                var id = SaveFile(file);
                IDsList.Files.Add(new IDsList.FileInfo() { id = id, fileName = file.FileName });
                filesCounter++;
            }
            catch(Exception ex)
            {
                message = $"{message}{ex.Message}\n";
            }
        }

        IDsList.message = $"Amount: {filesCounter}.\n{message}";

        return Content(JsonConvert.SerializeObject(IDsList), "application/json");
    }