'How to send multipart/form-data to ASP.NET Core Web API?
I'm trying to send a image and text fields to an API endpoint but I'm received
Unsupported content type 'multipart/form-data; boundary=---------------------------81801171514357
This is a ASP.NET Core 2.1 Web API. I have this:
[HttpPost("/api/account"), Authorize]
public void SaveUser(UserModel info)
And my model:
[JsonProperty(PropertyName = "avatar")]
[DataType(DataType.Upload)]
public IFormFile Avatar { get; set; }
[JsonProperty(PropertyName = "name")]
[DataType(DataType.Text)]
public string Name { get; set; }
Then I use axios:
var formData = new FormData();
formData.append("avatar", imageFile);
formData.append("name", name);
axios.post("/api/account", formData);
I expected this method to run, not throw an exception. But how? I have tried to add:
[Consumes("application/json", "multipart/form-data")]
But no success.
Then I tried:
[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)
The method runs, but the properties is empty on info object :(
UPDATE: Solution, don't use JsonProperty PropertyName. Use the variable name.
Solution 1:[1]
Maybe you should try decorate controller input and model with [FromForm] attribute?
See more info here: web api parameters binding.
In given example your controller action should look like this:
[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)
In model:
[FromForm(Name="avatar")]
public IFormFile Avatar { get; set; }
[FromForm(Name="name")]
public string Name { get; set; }
Solution 2:[2]
1-send multi part file
[HttpPost, Route("postimagenews")]
public IActionResult PostImageNews([FromForm] IFormFile file)
{
try
{
if (file == null || file.Length == 0)
{
return BadRequest("Please send a photo");
}
//create unique name for file
var fileName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName);
//set file url
var savePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/images/news", fileName);
using (var stream = new FileStream(savePath, FileMode.Create))
{
file.CopyTo(stream);
}
return Ok(fileName);
}
catch
{
return BadRequest("error in upload image");
}
}
2-recive multi part file
public static async Task<string> PostImage(string apiendpoint, IFormFile data)
{
using (var httpClient = new HttpClient())
{
var multipartContent = new MultipartFormDataContent();
var fileContent = new ByteArrayContent(GetFileArray(data));
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
multipartContent.Add(fileContent, "file",data.FileName);
var resultUploadImage= await httpClient.PostAsync(apiendpoint, multipartContent);
if (resultUploadImage.IsSuccessStatusCode)
{
var fileName=(await resultUploadImage.Content.ReadAsStringAsync()).Replace("\"", "");
return fileName;
}
return "";
}
}
public static byte[] GetFileArray(IFormFile file)
{
using (var ms = new MemoryStream())
{
file.CopyTo(ms);
return ms.ToArray();
}
}
3-send file multi part with postman
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Diako Hasani |

