You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.5中如何将byte转换为IFormFile调用.NET Core接口

解决.NET 4.5向.NET Core Web API上传byte数组作为IFormFile的问题

你的核心问题是没有正确构造符合multipart/form-data规范的请求内容,导致.NET Core端无法将上传的byte数组识别为IFormFile。以下是修正后的实现方案:

修正后的代码

using (HttpClient client = new HttpClient())
{
    client.BaseAddress = new Uri(ServiceInfo.VIPCParams["DMSUri"].Value);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", responseModelLogin.Token);

    // 与API接口的ICollection<IFormFile>参数名保持一致,示例假设参数名为"files"
    string formFieldName = "files";
    // 自定义文件名和对应的媒体类型(根据实际图片类型调整,比如image/png)
    string fileName = "uploaded-image.jpg";
    string mediaType = "image/jpeg";

    // 包装byte数组并设置正确的媒体类型
    ByteArrayContent fileContent = new ByteArrayContent(uploadRequest.File);
    fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(mediaType);

    // 构造多部分表单内容,关键是指定表单字段名和文件名
    var multipartContent = new MultipartFormDataContent();
    // 参数顺序:内容对象、表单字段名、文件名
    multipartContent.Add(fileContent, formFieldName, fileName);

    // 发送请求(异步场景推荐用await替代.Result,避免死锁)
    HttpResponseMessage res = client.PostAsync(url, multipartContent).Result;
    string data = res.Content.ReadAsStringAsync().Result;
    mSUploadResponse = JsonConvert.DeserializeObject<DMSUploadResponse>(data);
}

关键注意事项

  • 表单字段名必须匹配:multipartContent.Add的第二个参数必须和.NET Core API中ICollection<IFormFile>的参数名完全一致。例如API定义为public IActionResult Upload([FromForm]ICollection<IFormFile> files),则这里必须填"files"。
  • 指定文件名和媒体类型:必须为上传内容设置文件名(任意合法名称均可)和正确的媒体类型,否则.NET Core无法将其解析为IFormFile实例。
  • 同步调用风险:如果你的代码运行在异步上下文(比如ASP.NET MVC控制器),建议将.Result替换为await,避免潜在的死锁问题。

内容的提问来源于stack exchange,提问作者Nahid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:13:31