Kha*_*yen 0 c# asp.net-web-api angularjs asp.net-core asp.net-core-webapi
是否可以在操作中发布 IFormCollection 和 Object?
public Task CreateEMail(IFormCollection collection, [FromBody] Model model)
Run Code Online (Sandbox Code Playgroud)
我尝试从 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
Run Code Online (Sandbox Code Playgroud)
网页API代码:
public Task CreateEMail(IFormCollection collection, [FromBody] Model model)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我如何实现这个 WebAPI?
更新:我正在考虑将所有内容添加到 FormCollection 中,但这将是解析数据的非常糟糕的代码
您只能将单个内容值发布到 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();
}
}
Run Code Online (Sandbox Code Playgroud)
网页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();
}
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用自定义参数绑定,例如 JObject、FormDataCollection 或 Query String。
希望它有帮助。
| 归档时间: |
|
| 查看次数: |
2095 次 |
| 最近记录: |