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.
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; }
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
Here is a working example for what you are looking for
Controller:
[HttpPost]
public async Task<IActionResult> SaveFile([FromForm] IFormFile file) {
// Your code here
}
And inside your model:
public IFormFile File { get; set; }
Change async Task<IActionResult>
if you don't need it...
也许您应该尝试使用application/x-www-form-urlencoded
而不是multipart/form-data
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.