簡體   English   中英

.net core 2.1 使用 Postman“POST”一個 IFormFile - 應用程序在沒有讀取整個請求正文的情況下完成

[英].net core 2.1 "POST" an IFormFile using Postman - the application completed without reading the entire request body

我正在研究 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();
    }

這是我的郵遞員電話: 在此處輸入圖片說明

由於Kestrel失敗,此呼叫永遠不會結束在此處輸入圖片說明

我已經嘗試過使用Consumes

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

同樣在郵遞員中,我已將 Content-Type 設置為 multipart/form-data

我在這里找到了 .Net Core 2.1/2.2 的解決方案

從 POSTMAN POST 多個文件

從 POSTMAN POST 單個文件

    [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");
    }

嘗試這樣做。 在您現在使用的郵遞員中使用相同的請求。 這只是粗略的樣板方法,但您明白了。

另外,不要忘記在郵遞員中將您的請求標頭設置為: 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);
}

我試過了,它奏效了。 也許你忘記了做某事。 刪除[FromBody]屬性。

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

Postman 會自動附加正確的Content-Type ,在 body 部分選擇form-data選項並使用文件鍵添加您的文件。

它應該工作。

Postman macOS application似乎存在錯誤問題。 當我使用postman chrome extension一切都按預期工作。

macOS 應用程序macOS 應用程序

Chrome 擴展程序在此處輸入圖片說明

我知道這已得到解答,但您似乎已決定采用一種解決方法。 您的端點和郵遞員請求都沒有問題,我遇到了同樣的問題,為我的操作系統安裝了本地郵遞員解決了這個問題https://www.getpostman.com/apps

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM