【问题标题】:IFormFile file is allways null at my controllerIFormFile 文件在我的控制器上始终为空
【发布时间】:2019-08-08 06:16:55
【问题描述】:

当我从 Postman 向我的控制器发送文件时,对象 file 始终为空。

[Route("api/[controller]")]
[ApiController]
public class FileUploadController : BaseApiController<FileUploadController>
{
    public FileUploadController(ILogger<FileUploadController> logger) : base(logger) { }

    [HttpPost]
    [DisableRequestSizeLimit]
    public async Task<IActionResult> Post(IFormFile file)
    {
        MemoryStream ms = new MemoryStream(new byte[file.Length]);

在 Postman,我将 POST https://localhost:5001/api/FileUpload,没有参数,没有标题,正文设置为表单数据和键:文件,值我选择一个文件。发送。

在我上面最后一行代码的断点处,对象 file 总是 null如何将文件放入我的控制器?

【问题讨论】:

标签: c# asp.net-core asp.net-web-api .net-core


【解决方案1】:

第一种解决方案: 如果要使用IFormFile 参数,还必须在邮递员form-data 中输入输入参数的名称,如下所示:

第二种解决方案: 使用 .net Core 2.X 从HttpContext 获取文件:

        public async Task<IActionResult> Post()
        {
            IFormFile file = HttpContext.Request.Form.Files[0];
        }

【讨论】:

    【解决方案2】:

    唯一的问题是 Postman Body 键处的拼写 File 而不是 file,如提到了KDM。

    【讨论】:

      【解决方案3】:

      试试这个:

      在类中添加IFormFile类型的属性,如:

      public class FileData
      {
          public IFormFile file { get; set; } 
      } 
      

      将该类添加为输入参数。

      public async Task<IActionResult> Post([FromForm] FileData fileData)
      {   
         // fileData.file 
      }
      

      您将在fileData.file获得附件

      【讨论】:

      • 那里我得到一个 415“不支持的媒体类型”。
      • 确保您使用key :file 以邮递员的形式发送数据
      • 是的。表单数据。键:文件,值:选择的小文件
      • Content-Type 应该是 multipart/form-data
      • 检查你的密钥应该是file而不是File
      猜你喜欢
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多