簡體   English   中英

如何發送 multipart/form-data 到 ASP.NET Core Web API?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM