首页 > 解决方案 > WebAPI HttpPost 将 IFormFile 和一个模型作为输入参数

问题描述

我想创建一个上传文件的方法 + 将 class\struct 的实例作为附加参数。

// Works
[HttpPost("test_1")]
public async Task<IActionResult> Test1(IFormFile file) { return Ok(); }

public struct MyModel
{
    public int Value1 { get; set; }
    public int Value2 { get; set; }
}

// Doesn't work
[HttpPost("test_2")]
public async Task<IActionResult> Test2(IFormFile file, MyModel model) { return Ok(); }

调用test_2产生以下结果:

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.13",
  "title": "Unsupported Media Type",
  "status": 415,
  "traceId": "8000000c-0007-fd00-b63f-84710c7967bb"
}

我应该如何修改test_2方法以产生所需的结果?

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

解决方案


因为您的请求包含多个部分(文件和可选数据)。
所以把它改成 form-data 就可以用Api 上的[FromForm]来获取了。
尝试这个

public struct MyModel
{
    public int Value1 { get; set; }
    public int Value2 { get; set; }
    public IFormFile Files { get; set; }
}

[HttpPost("test_2")]
public async Task<IActionResult> Test2([FromForm]MyModel model) { return Ok(); }

希望能帮助到你


推荐阅读