.NET核心Web API和Swagger:在同一调用中发布文件和数据

.NET核心Web API和Swagger:在同一调用中发布文件和数据,swagger,asp.net-core-webapi,Swagger,Asp.net Core Webapi,我已经创建了一个.NETCore3.1WebAPI,并使用swagger进行文档/预览。我想上传一个文件,并发送一些数据给post通话。我可以打一个电话上传数据,这很有效。我可以再打一次电话来发送对象数据,这样就行了但尝试将2组合在一起(通过使用swagger界面填写数据)从未命中该方法,并给出错误:不支持的媒体类型。 [HttpPost] [Route("Send")] public void Send(IFormFile file, Email emailInfo)

我已经创建了一个.NETCore3.1WebAPI,并使用swagger进行文档/预览。我想上传一个文件,并发送一些数据给post通话。我可以打一个电话上传数据,这很有效。我可以再打一次电话来发送对象数据,这样就行了但尝试将2组合在一起(通过使用swagger界面填写数据)从未命中该方法,并给出错误:不支持的媒体类型。

    [HttpPost]
    [Route("Send")]
    public void Send(IFormFile file, Email emailInfo)
    {

    }

    [HttpPost]
    [Route("Test")]
    public void Test(IFormFile file)
    {

    }

    public class Email
    {
        public List<string> To { get; set; }
        public string Body { get; set; }
        public string Subject { get; set; }
        public IFormFile Files { get; set; }
    }
[HttpPost]
[路线(“发送”)]
公共无效发送(文件、电子邮件和电子邮件信息)
{
}
[HttpPost]
[路线(“测试”)]
公共无效测试(格式化文件)
{
}
公共类电子邮件
{
要{get;set;}的公共列表
公共字符串体{get;set;}
公共字符串主题{get;set;}
公共文件文件{get;set;}
}

您可能会注意到,在发送时,我将IFromFile作为参数,但在电子邮件obejct中也有IFromFile。出于某种原因,为了使Swagger在参数中显示文件选择按钮,它需要在两个位置

尝试使用[From Query]绑定:

    [HttpPost]
    [Route("Send")]
    public void Send([FromQuery] Email emailInfo)
    {
        var emailFromParam = emailInfo;
    }
输入:

显示参数值的调试输出: