如何在 API 中接收 MultipartFormDataContent?

How to receive MultipartFormDataContent in API?

网络核心应用。我有一个休息 API 将文件发送到另一个 API.

下面是第一个 API 将文件发送到第二个 API 的逻辑。

using (var client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", await _tokenService.GetToken());
                    MultipartFormDataContent multipartFormData = new MultipartFormDataContent();
                    string contentJson = JsonConvert.SerializeObject(request);
                    HttpContent data = new StringContent(contentJson, Encoding.UTF8, "application/json");
                    multipartFormData.Add(data, "data");
                    foreach (var file in fileList)
                    {
                        if (file.Length <= 0)
                            continue;
                        var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
                        multipartFormData.Add(new StreamContent(file.OpenReadStream())
                        {
                            Headers =
                            {
                        ContentLength = file.Length,
                        ContentType = new MediaTypeHeaderValue(file.ContentType)
                            }
                        }, "File", fileName);
                    }
                    try
                    {
                        var response = await client.PostAsync("https://localhost:44370/apisendfile", multipartFormData);
                    }
                    catch (Exception ex)
                    {
                    }
                }

我有第二个API如下

 public async Task<ActionResult> SendMail([FromBody] MultipartFormDataContent formDataContent)
        {
        }

当我第一次调试时 API 我收到错误

Unsupported Media Type

我千方百计想弄明白,但没能成功。有人可以帮我确定这个问题。任何帮助,将不胜感激。谢谢

嗯,你可以试试下面的方法,

Web API 控制器:

        [HttpPost]
        public string UploadMultipartFile()
        {
            var file = HttpContext.Current.Request.Files.Count > 0 ?
                HttpContext.Current.Request.Files[0] : null;

            if (file != null && file.ContentLength > 0)
            {
                var fileName = Path.GetFileName(file.FileName);

                var path = Path.Combine(
                    HttpContext.Current.Server.MapPath("~/MrPerfectMaltipartFolder"),
                    fileName
                );

                file.SaveAs(path);
            }

            return file != null ? "/MrPerfectMaltipartFolder/" + file.FileName : null;
        }

文件夹位置:

测试 Post 男人:

打开文件夹位置:

上传文件:

对于N种分段数据上传:

    [HttpPost]
    public object UploadMultipartFileList()
    {
        var uploadedFilesName = new List<string>();
        if (HttpContext.Current.Request.Files.Count > 0)
        {
            int count = 0;
           
            foreach (var item in HttpContext.Current.Request.Files)
            {


                var getFile = HttpContext.Current.Request.Files[count];
                if (getFile != null)
                {
                    var fileName = Path.GetFileName(getFile.FileName);

                    var path = Path.Combine(
                        HttpContext.Current.Server.MapPath("~/MrPerfectMaltipartFolder"),
                        fileName
                    );

                    getFile.SaveAs(path);
                }
                count++;
                string file = "/MrPerfectMaltipartFolder/" + getFile.FileName;
                uploadedFilesName.Add(file);
            }
        }




        return uploadedFilesName;
    }

输出:

数据和文件示例:

        [HttpPost]
        public object UploadMultipartFileList()
        {
            HttpRequest multipartRquest = HttpContext.Current.Request;
          
           //General Data Part
            string engineerName = multipartRquest.Form["EngineerName"];
            string engineerEmail = multipartRquest.Form["EngineerEmail"];

            //File Upload Part
            var FilesName = new List<string>();
            if (HttpContext.Current.Request.Files.Count > 0)
            {
                int count = 0;
               
                foreach (var item in HttpContext.Current.Request.Files)
                {


                    var getFile = HttpContext.Current.Request.Files[count];
                    if (getFile != null)
                    {
                        var fileName = Path.GetFileName(getFile.FileName);

                        var path = Path.Combine(
                            HttpContext.Current.Server.MapPath("~/MrPerfectMaltipartFolder"),
                            fileName
                        );

                        getFile.SaveAs(path);
                    }
                    count++;
                    string file = "/MrPerfectMaltipartFolder/" + getFile.FileName;
                    FilesName.Add(file);
                }
            }




            return FilesName;
        }

请求格式:

输出:

希望它能解决您的问题。如果您仍然遇到任何问题,请随时分享。