如何将 multipart/form-data 发送到 ASP.NET Core Web API?
Posted
技术标签:
【中文标题】如何将 multipart/form-data 发送到 ASP.NET Core Web API?【英文标题】:How to send multipart/form-data to ASP.NET Core Web API? 【发布时间】:2019-06-22 00:03:03 【问题描述】:我正在尝试将图像和文本字段发送到 API 端点,但我收到了
不支持的内容类型'multipart/form-data; 边界=----------------------------81801171514357
这是一个 ASP.NET Core 2.1 Web API。我有这个:
[HttpPost("/api/account"), Authorize]
public void SaveUser(UserModel info)
还有我的模特:
[JsonProperty(PropertyName = "avatar")]
[DataType(DataType.Upload)]
public IFormFile Avatar get; set;
[JsonProperty(PropertyName = "name")]
[DataType(DataType.Text)]
public string Name get; set;
那我用axios:
var formData = new FormData();
formData.append("avatar", imageFile);
formData.append("name", name);
axios.post("/api/account", formData);
我希望这个方法能够运行,而不是抛出异常。但是怎么做?我已经尝试添加:
[Consumes("application/json", "multipart/form-data")]
但没有成功。
然后我尝试了:
[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)
方法运行,但 info 对象的属性为空:(
更新: 解决方案,不要使用 JsonProperty PropertyName。使用变量名。
【问题讨论】:
上传详细文件时应使用public void SaveUser(IFormCollection collection)
。关注这个***.com/questions/53825794/…
是否有任何演示可以重现您的问题?我用你当前的代码做了一个测试,它工作正常。
我还有一个方法:[HttpPost("/api/avatar"), Authorize] public void SaveAvatar(IFormFile avatar) 没有问题。但是当我在模型中添加 IFormFile 和属性时,我得到“不支持的内容类型'multipart/form-data”。
现在,我发现我不能使用 JsonProperty 名称,我必须使用 Avatar 和 Name(属性名称)。然后它工作正常。可以设置属性的名称吗?
这就是解决方案。[***.com/questions/60275185/…
【参考方案1】:
这是您正在寻找的工作示例
控制器:
[HttpPost]
public async Task<IActionResult> SaveFile([FromForm] IFormFile file)
// Your code here
在你的模型内部:
public IFormFile File get; set;
如果您不需要,请更改async Task<IActionResult>
...
【讨论】:
【参考方案2】:也许您应该尝试使用[FromForm]
属性装饰控制器输入和模型?
在此处查看更多信息:web api parameters binding。
在给定的示例中,您的控制器操作应如下所示:
[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)
在模型中:
[FromForm(Name="avatar")]
public IFormFile Avatar get; set;
[FromForm(Name="name")]
public string Name get; set;
【讨论】:
是的,我尝试添加,[FromForm] 那么我模型中的所有属性都是空的。 尝试在模型属性上添加这个属性。 我发现我不能使用 JsonProperty 名称,我必须使用 Avatar 和 Name(属性名称)。然后它工作正常。可以设置属性的名称吗? 使用应该在控制器动作和模型定义中使用 [FromForm] 属性。至少这对我有用。 这救了我的命!我为这个问题彻夜未眠。非常感谢@joostas以上是关于如何将 multipart/form-data 发送到 ASP.NET Core Web API?的主要内容,如果未能解决你的问题,请参考以下文章
.Net MVC 如何将 multipart/form-data 提交到 Web Api
表单的enctype="multipart/form-data"
关于Content-Type: multipart/form-data的支持