首页 > 解决方案 > 带有文件和正文的 WebAPI 方法

问题描述

我有一个如下所示的 WebAPI 方法。上传文件就可以了,但我还需要一个附加对象,其中包含有关如何处理文件的信息。到目前为止我已经尝试过:

//Works fine but no body defined
[HttpPut("{id}")]
public IActionResult Put(string id, IFormFile file)
{
    //Do stuff
    return StatusCode(200);
}

public class UploadFile
{
    //As simple example
    public string Description { get; set; }
    public Dictionary<string, string> Keys { get; set; }
}

//What I would like to have, but doesn't work
[HttpPut("{id}")]
public IActionResult PutTest(string id, IFormFile file, [FromBody] UploadFile info)
{
    //Do stuff
    return StatusCode(200);
}

使用带有以下输入的 SwaggerUI:

在此处输入图像描述

我收到 400 Bad Request 的消息"The input was not valid."。SwaggerUI 显示请求的以下 cURL(似乎不包含正文上的任何信息):

curl -X PUT "https://localhost:5001/api/Document/test/test.txt" -H  "accept: application/json" -H  "Content-Type: multipart/form-data" -d {"file":{}}

我怎样才能最好地解决这个问题以获得我想要的结果?

标签: c#asp.net-core

解决方案


您是否尝试将 IFormFile 和 UploadFile 包装到单视图模型中:

public class FileViewModel{ 
    public UploadFile UploadFile{get;set;} 
    public IFormFile File {get; set;}
}

然后

[HttpPut("{id}")]
public IActionResult PutTest(string id, FileViewModel vm)
{
//Do stuff
return StatusCode(200);
} 

推荐阅读