IFormFile在ASP.NET Core 2.1中始终返回null

Her*_*man 3 c# asp.net asp.net-web-api asp.net-core asp.net-core-webapi

api方法如下图

    [HttpPost]
    public async Task<BaseListResponse<MediaStorageModel>> MediaBrand(IFormFile file, int brandId)
    {
        var files = new List<IFormFile>();
        files.Add(file);

        var response = await this.Upload(files, "brand", brandId);

        return response;
    }
Run Code Online (Sandbox Code Playgroud)

我的邮递员配置 在此处输入图片说明

将我的dotnet核心从2.0升级到2.1不能正常工作,任何人都可以帮忙。出什么事了

Knu*_*urO 13

确保表单是正确的编码类型

<form asp-action="Edit" enctype="multipart/form-data">
Run Code Online (Sandbox Code Playgroud)

我还必须根据生成的代码更改模型绑定的工作方式:

public async Task<IActionResult> Edit([Bind("Text,Example")] Example example)
Run Code Online (Sandbox Code Playgroud)

到这个代码:

public async Task<IActionResult> Edit(Example example)
Run Code Online (Sandbox Code Playgroud)


Ram*_*ran 6

我也遇到过同样的问题,我可以通过将“名称”命名参数应用到具有窗体中“文件”字段名称的FromForm属性的方法来解决。它指定表单中的哪个字段绑定到method参数。更改您的方法签名,如下所示。

[HttpPost("status")]
public async Task<BaseListResponse<MediaStorageModel>> MediaBrand([FromForm(Name ="file")] IFormFile file, int brandId)
Run Code Online (Sandbox Code Playgroud)


小智 6

在您的表单中使用

enctype="multipart/form-data"

  • 答对了。表单需要如下所示: &lt;form enctype="multipart/form-data" name="input" action="[controller stuff]" method="post"&gt; (2认同)

小智 5

将 (Name = "body") 添加到对我有用的 from 表单

服务器调用

[HttpPost]
  [Route("UploadImage")]

public IActionResult UploadImage([FromForm(Name = "body")]IFormFile formData)
Run Code Online (Sandbox Code Playgroud)

客户端代码

let formData = new FormData();
formData.append('body', event.target.files[0]);

const config = {
  headers: {
  'content-type': 'multipart/form-data',
  },
}

axios.post(ApiURL,formData, config);
Run Code Online (Sandbox Code Playgroud)


Vil*_*mir 0

我找到了一个解决方法来使其工作:

使用HttpPut而不是HttPost在控制器操作上。

我也对这种行为感到惊讶。如果有人能解释为什么它可以解决问题,那会对我有帮助。