当前位置: 首页 > 知识库问答 >
问题:

WebAPI是否可以在操作中发布IFormCollection和对象?

曹均
2023-03-14

是否可以在操作中发布IFormCollection和Object?

public Task CreateEMail(IFormCollection collection, [FromBody] Model model)

我尝试从Angular向WebAPI发出post请求,请求是上传文件和模型的组合。

角度代码:

let model = {title:'test', subject:'test'};
let formData = new FormData();
for (let i = 0; i < this.droppedFilesData.length; i++) {
    let file = this.droppedFilesData[i];
    let fileName = file.name;
    formData.append(fileName, file);
}
this.service.createEmail(formData, model); // how to implement to post formData and model
public Task CreateEMail(IFormCollection collection, [FromBody] Model model)
{
    ...
}

如何实现这个WebAPI?

更新:我正在考虑将所有内容添加到FormCollection中,但这对于解析数据来说是非常糟糕的代码

共有1个答案

令狐泓
2023-03-14

只能向Web API Action方法发布单个内容值。试试这个:

角度代码:

<input type="file" name="uploadFiles" (change)="onSelectFile($event)" />
onSelectFile(event: any) {
        const fi = event.srcElement;
        if (fi.files && fi.files[0]) {
            const fileToUpload = fi.files[0];
            const formData = new FormData();
            const model = new Model('name', 'email@gmail.com');
            formData.append(fileToUpload.name, fileToUpload);
            console.log(JSON.stringify(model));
            formData.append('model', JSON.stringify(model));
            this.http.post(this.requestUploadURL, formData).subscribe();
        }
}

Web Api代码:

public async Task<IActionResult> UploadFile()
{
     var formFile = Request.Form.Files?.FirstOrDefault();
     var canParse = Request.Form.TryGetValue("model", out var model);
     if (canParse)
     {
          var data = JsonConvert.DeserializeObject<Model>(model.ToString());
     }

     return Ok();
}

此外,还可以使用自定义参数绑定,如JObject、FormDataCollection或查询字符串

 类似资料:
  • 我正在编写一个带有事务回滚的简单json数据库。我需要向一个文件追加一行文本,然后根据追加是否成功,将成功或失败记录到另一个文件。如果需要,第二个文件用于回滚。因此,在继续之前,我需要确定写操作是否成功。 我使用stream.write追加我的文本行,其中包括一个回调,应该验证写操作的成功或失败。 然后我在下面的URL上的NodeJS文档中读到了这个不幸的消息https://nodejs.org/

  • 问题内容: 我正在构建一个React应用,并正在调用一个自定义处理程序库来调用我们的REST API。 在这些(非响应)函数中,我想触发Redux操作以使用端点响应来更新商店,但是如果没有通常的’mapDispatchToProps’/ connect()方法,就无法弄清楚如何触发Redux操作。 这可能吗? 谢谢 问题答案: 为了从您的范围之外进行调度和采取行动,您需要获取商店实例并像这样调用它

  • 问题内容: 我试图弄清楚如何将对象从表单发布到Web api服务。在我的控制器中,我定义了一个想要向其添加输入值的模型。 在我的输入字段中,我将它们绑定起来,例如: 在提交表单时,将这两个字段传递给我的服务并提交给我的WebApi 我已经通过两种方式尝试了此提交: 并且也如下,不声明参数 在webAPI中,我为帖子设置了一个方法 ReportLabel(dto)的定义如下: 我遇到的问题是,当我从

  • 今天早上,我发现了我的GitHub Actions BETA版邀请,并开始玩它,目的是迁移一些我目前在CircleCi上运行的简单构建、测试和部署管道。 我仍然在试图理解操作,但我心目中的流程是,在推动之后,工作流中的第一个操作将启动一个Docker容器。在这个容器中,我将运行一些简单的构建过程,比如最小化资产和移除人工制品。接下来的操作将在构建上运行一些测试。管道中的下一个操作将部署到许多环境中

  • 在iOS上,你可以选择在苹果验证你的应用程序后,你希望它什么时候出现在商店里。Android和谷歌Play商店能做到这一点吗?

  • 我制作了一个类 在另一个类中 正如您所看到的,我创建了这个数组,并将UImages与txt和txt2一起放置在其中。简单地说,我要向用户显示一个图像,然后输入一个描述图像的输入,然后检查它是否匹配txt和txt2。在运行模拟器时,我得到以下错误: ***由于未捕获异常“nSunKnownKeyException”而终止应用程序,原因:“[ SetValue:ForUndefinedKey:]:对于