【问题标题】:WebAPI Is it possible to post an IFormCollection and Object in an action?WebAPI 是否可以在操作中发布 IFormCollection 和对象?
【发布时间】:2019-05-18 10:39:17
【问题描述】:

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

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

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

角度代码:

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

WebAPI 代码:

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

如何实现这个 WebAPI?

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

【问题讨论】:

  • 请向我们展示您的代码
  • 是的,我添加了更多代码。我没有任何想法来实现这一点

标签: c# angularjs asp.net-web-api asp.net-core asp.net-core-webapi


【解决方案1】:

您只能将单个内容值发布到 Web API 操作方法。试试这个:

角度代码:

<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();
        }
}

网页 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 或查询字符串。

希望对你有帮助。

【讨论】:

  • 是的,我知道,但是我们有什么方法可以分离表单和模型吗?
猜你喜欢
  • 1970-01-01
  • 2011-02-09
  • 2015-04-18
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多