WebAPI HttpPost以IFormFile和模型作为输入参数

时间:2019-09-30 09:53:24

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

我想创建一个上载文件的方法+将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方法以产生所需的结果?

1 个答案:

答案 0 :(得分:4)

因为您的请求包含多个部分(文件和可选数据)。
因此,将其更改为表单数据,就可以通过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(); }

希望有帮助