我正在使用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
答案 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)
答案 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
[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");
}