![](/img/trans.png)
[英]how to send request from Asp.net MVC to external api in multipart/form-data type
[英]How to send multipart/form-data to ASP.NET Core Web API?
我正在尝试将图像和文本字段发送到 API 端点,但我收到了
不支持的内容类型 'multipart/form-data; 边界=----------------------------81801171514357
这是一个 ASP.NET Core 2.1 Web API。我有这个:
[HttpPost("/api/account"), Authorize]
public void SaveUser(UserModel info)
还有我的 model:
[JsonProperty(PropertyName = "avatar")]
[DataType(DataType.Upload)]
public IFormFile Avatar { get; set; }
[JsonProperty(PropertyName = "name")]
[DataType(DataType.Text)]
public string Name { get; set; }
然后我使用axios :
var formData = new FormData();
formData.append("avatar", imageFile);
formData.append("name", name);
axios.post("/api/account", formData);
我希望这个方法能够运行,而不是抛出异常。 但是怎么办? 我试图添加:
[Consumes("application/json", "multipart/form-data")]
但没有成功。
然后我尝试了:
[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)
该方法运行,但信息 object 上的属性为空:(
更新:解决方案,不要使用 JsonProperty PropertyName。 使用变量名。
也许您应该尝试使用[FromForm]
属性装饰控制器输入和模型? 在此处查看更多信息: web api 参数绑定。
在给定的示例中,您的控制器操作应如下所示:
[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)
在模型中:
[FromForm(Name="avatar")]
public IFormFile Avatar { get; set; }
[FromForm(Name="name")]
public string Name { get; set; }
1-发送多部分文件
[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-接收多部分文件
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-发送文件多部分与 postman
这是您正在寻找的工作示例
控制器:
[HttpPost]
public async Task<IActionResult> SaveFile([FromForm] IFormFile file) {
// Your code here
}
在你的模型中:
public IFormFile File { get; set; }
如果不需要,请更改async Task<IActionResult>
...
也许您应该尝试使用application/x-www-form-urlencoded
而不是multipart/form-data
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.