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

ASP.NET Core 2.0文件上传接口接收文件为Null的问题排查

问题分析与解决方案

你的后端Action代码逻辑是没问题的,导致IFormFile始终为null的原因完全出在控制台客户端的请求构建上,有几个关键配置错误:

  • ContentDisposition的Name参数不匹配
    后端Action的参数名是file,但你在客户端里把ContentDispositionHeaderValue的Name设置成了文件路径"D://Infos.txt"。ASP.NET Core的模型绑定是根据表单字段名来匹配参数的,字段名不对应就找不到数据,所以这里必须改成和后端参数一致的"file"。另外FileName也不需要带完整路径,只保留文件名"Infos.txt"即可,避免服务器端处理路径时出现异常。

  • StreamContent的ContentType设置错误
    你给单个文件的StreamContent设置了multipart/form-data,但这个类型是整个表单请求的Content-Type,单个文件应该使用对应文件的实际类型(比如文本文件用text/plain),或者用通用的二进制类型application/octet-stream。MultipartFormDataContent会自动处理整个请求的multipart类型,不需要单独给文件流设置。

  • 额外优化:异步调用规范
    客户端里用response.Result会阻塞线程,建议改用await异步调用,让代码更符合.NET的异步规范。

下面是修复后的完整客户端代码:

static async Task Main(string[] args)
{
    using var stream = new FileStream("D://Infos.txt", FileMode.Open);
    var fileStreamContent = new StreamContent(stream);
    
    // 修正ContentDisposition:Name匹配后端参数名,FileName只保留文件名
    fileStreamContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
    {
        Name = "file",
        FileName = "Infos.txt"
    };
    // 修正ContentType为文件实际类型,这里用文本文件的类型示例
    fileStreamContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/plain");

    using var client = new HttpClient();
    using var formData = new MultipartFormDataContent();
    formData.Add(fileStreamContent);
    
    // 改用await异步调用
    var response = await client.PostAsync("http://localhost:2184/api/values", formData);
    Console.WriteLine(response.IsSuccessStatusCode);
    Console.ReadKey();
}

把客户端代码改成这样后,后端的IFormFile file就能正常接收到上传的文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:36:16