Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用模型对象上载Asp.net WebApi 2文件_C#_Asp.net_.net_Asp.net Web Api2 - Fatal编程技术网

C# 使用模型对象上载Asp.net WebApi 2文件

C# 使用模型对象上载Asp.net WebApi 2文件,c#,asp.net,.net,asp.net-web-api2,C#,Asp.net,.net,Asp.net Web Api2,项目为(.net Framework 4.6.1 on Azure) 是否有人知道是否有一种方法可以使用控制器在同一请求中同时接受文件上传和模型实体(Json)。客户端应用程序需要上传一个文件,以及有关该文件的元数据,如果可能的话,我们希望在一个请求中完成 我想到了两种可能性: 发布文件和单个模型字段(模型是平面的),就好像它是一个web表单一样,因此手动从表单构建我的模型对象。(阿拉) 将文件和模型对象作为另一个json文件发布,并作为自定义MultipartMemoryStreamProvi

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

我想到了两种可能性:

  • 发布文件和单个模型字段(模型是平面的),就好像它是一个web表单一样,因此手动从表单构建我的模型对象。(阿拉)
  • 将文件和模型对象作为另一个json文件发布,并作为自定义MultipartMemoryStreamProvider的一部分反序列化到我的模型对象中
  • 我是否错过了一个选择?
    TIA

    我会尝试将文件添加到模型中,或者创建一个包含数据和文件的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;
    }
    
    [路线(“你的路线”)]
    [HttpPost]
    公共异步任务YourAction(yourModel模型)
    {
    //在此处设置断点以查看是否填充了字段
    ...
    //对你的模特做点什么
    ...
    归还任何你想归还的东西;
    }
    
    视图: 只要输入字段的名称与对象中字段的名称匹配,它们就应该映射

    <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>
    
    
    ... 
    
    我会尝试将文件添加到模型中,或者创建一个包含数据和文件的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;
    }
    
    [路线(“你的路线”)]
    [HttpPost]
    公共异步任务YourAction(yourModel模型)
    {
    //在此处设置断点以查看是否填充了字段
    ...
    //对你的模特做点什么
    ...
    归还任何你想归还的东西;
    }
    
    视图: 只要输入字段的名称与对象中字段的名称匹配,它们就应该映射

    <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>
    
    
    ... 
    
    根据元数据中的字段数量,您可以向请求中添加自定义标题,如选项3所示。根据元数据中的字段数量,您可以向请求中添加自定义标题,如选项3所示。