【问题标题】:Why file IFormFile = null?为什么文件 IFormFile = null?
【发布时间】:2019-07-01 09:03:21
【问题描述】:
[Route("api/file")]
[Produces("application/json")]
[Consumes("application/json", "application/json-patch+json", "multipart/form-data")]
[ApiController]
public class FileController : ControllerBase
{
    public FileController()
    {
    }

    [HttpPost]
    public async Task<IActionResult> PostProfilePicture([FromQuery]IFormFile file)
    {
        var stream = file.OpenReadStream();
        var name = file.FileName;
        return null;
    }
}

邮递员

调试

最后文件 = null 如何解决这个问题?

【问题讨论】:

标签: c# asp.net-core asp.net-core-webapi


【解决方案1】:

您将其发送为x-www-form-urlencoded。您必须将其发送为multipart/form-data。文件上传只能在这种模式下进行,因此IFormFile 在所有其他模式下也将是null

x-www-form-urlencoded 是默认模式,仅用于在请求正文中发送键/值编码对。

[FromQuery] 也不是必需的,因为您无法通过查询参数上传文件。

【讨论】:

  • 删除[FromQuery]部分,因为它不是查询的一部分(查询是问号?key=value&amp;key2=value2之后的url部分)
【解决方案2】:

我猜你从IFormFile 得到 null 是因为你在 Controller 类上为这个操作指定了所需的属性,而不是在控制器方法上。如下更新您的代码将解决问题。

[Route("api/file")]
[ApiController]
public class FileController : ControllerBase
{

    public FileController()
    {

    }

    [HttpPost]
    [Produces("application/json")]
    [Consumes("multipart/form-data")]
    public async Task<IActionResult> PostProfilePicture([FromForm]IFormFile file)
    {
        var stream = file.OpenReadStream();
        var name = file.FileName;
        return null;
    }
}

希望这能解决您的问题。

【讨论】:

    【解决方案3】:

    您需要更改选择源的属性,模型绑定器将从该源中解析IFormFile 实例。而不是[FromQuery] 改为[FromForm]

    public async Task<IActionResult> PostProfilePicture([FromForm]IFormFile file)
    

    【讨论】:

    • 还有 file = null。 if 属性 -> [FromForm]
    • @АндрейЛяшенко 你发送的是什么Content-Type 标头(检查邮递员中的标头选项卡),它应该是multipart/form-data
    • 我得到内容类型 →text/html;字符集=utf-8 。如何获取多部分/表单数据?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多