c# - .net core 2.1 "POST"一个使用 Postman 的 IFormFile - 应用程序在未读取整个请求正文的情况下完成

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

我正在开发 dotnet 核心 WebAPI 2.1,但我找不到将图像发送到 Body 的方法。

Controller 看起来像这样:

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

这是我的 postman 电话: enter image description here

由于 Kestrel 失败,此调用永远不会结束 enter image description here

我已经尝试过使用Consumes

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

同样在 postman 中,我将 Content-Type 设置为 multipart/form-data

最佳答案

我找到了 .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");
    }

关于c# - .net core 2.1 "POST"一个使用 Postman 的 IFormFile - 应用程序在未读取整个请求正文的情况下完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51424273/

相关文章:

c# - Java/C#类型系统有哪些不足?

php - 如何在使用 GET 和 POST 方法时增加安全性?

PHP打开另一个带有POST数据的网页

c# - EF Core - 添加相关实体时出错

c# - 如何从 ASP.NET Core 3.1 中的 appsettings.json 读取整个部分?

c# - 如何创建值类型 "by reference"的实例

c# - ASP.NET MVC 如何在布局中使用分部 View ?

c# - -ms-文本大小调整 :auto not working on List in WebView

node.js - 如何在http请求中发送纯文本

c# - 当省略 "required"JSON 键时,.Net Core 2.1 MVC 中的验证不会失败