Asp.net WebApi 2使用模型对象上传文件

时间:2019-02-10 19:26:49

标签: c# asp.net .net asp.net-web-api2

项目为(Azure上的.net Framework 4.6.1) 有谁知道在相同的请求中是否有一种方法可以使用Controller来接受文件上传和模型实体(Json)。客户端应用需要上传文件以及有关文件的元数据,如果可能,我们希望在一个请求中完成。

我想到了两种可能性:

  1. 过帐文件,然后将各个模型字段(模型是扁平的)视为网络表单,因此请手动从表单中构建模型对象。 (la https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/sending-html-form-data-part-2
  2. 将文件和模型对象作为另一个json文件发布,并作为自定义MultipartMemoryStreamProvider的一部分反序列化到我的模型对象中

我缺少选择吗? TIA

1 个答案:

答案 0 :(得分:0)

我要尝试的只是将文件添加到模型中,或者创建一个同时包含数据和文件的ViewModel。由于数据绑定,只要您在客户端中的输入字段具有相同的名称,该数据就会在请求期间映射到该对象。

型号:

public class yourModel
{
    public string name {get;set;}
    ...
    //other data

    public IFormFile yourFile {get;set;} //your file
    ...
}

控制器:

[Route("YourRoute")]
[HttpPost]
public async Task<WhateverYouWantToReturn> YourAction(yourModel model)
{
     //set a breakpoint here to see if your fields populated
     ...
     //do something with your model
     ...
     return WhateverYouWantToReturn;
}

查看: 只要输入字段的名称与对象中字段的名称匹配,它们就应该映射。

<form enctype="multipart/formdata" method="post" action="/your/route">
     <input type="text" name="name"/>
     <input type="hidden" name="somesHiddenField" value="yourValue" />
     ... <!-- Whatever other fields you need. -->
     <input type="file" name="yourFile"/>
     <input type="submit" value="Submit" />
</form>