![](/img/trans.png)
[英]The application completed without reading the entire request body, .net core 2.1.1
[英].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();
}
我已經嘗試過使用Consumes
[Consumes("application/json", "application/json-patch+json", "multipart/from-data")]
同樣在郵遞員中,我已將 Content-Type 設置為 multipart/form-data
我在這里找到了 .Net Core 2.1/2.2 的解決方案
[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選項並使用文件鍵添加您的文件。
它應該工作。
我知道這已得到解答,但您似乎已決定采用一種解決方法。 您的端點和郵遞員請求都沒有問題,我遇到了同樣的問題,為我的操作系統安裝了本地郵遞員解決了這個問題https://www.getpostman.com/apps
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.