WebAPI是否可以在操作中发布IFormCollection和Object? [英] WebAPI Is it possible to post an IFormCollection and Object in an action?
问题描述
是否可以在操作中发布IFormCollection和对象?
Is it possible to post an IFormCollection and Object in an action?
public Task CreateEMail(IFormCollection collection, [FromBody] Model model)
我尝试从Angular向WebAPI发出发布请求,该请求是上载文件和模型的组合.
I try to make an post request to WebAPI from Angular and the request is a combination of uploaded files and a model.
角度代码:
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?
How do I implement this WebAPI?
更新:我正在考虑将所有内容添加到FormCollection中,但这对解析数据确实是不好的代码
Update: I am thinking about adding everything into FormCollection but that would be really bad code to parse data
推荐答案
您只能将单个内容值发布到Web API Action方法.试试这个:
You can only post a single content value to a Web API Action method. Try this:
角度代码:
<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代码:
Web Api Code:
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或查询字符串.
Furthermore, you can use custom parameter binding such as JObject, FormDataCollection or Query String.
希望这会有所帮助.
这篇关于WebAPI是否可以在操作中发布IFormCollection和Object?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!