![](/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.