我实际上正在使用.NET Core开发Angular 6应用程序,在此应用程序中,我有一个UserForm,用户可以在其中输入他的信息以及一张图片。
不带图片的表单提交工作良好,不带表单的图片提交也很好。 但是现在我想进行全局提交,但出现400错误:
“无法创建类型为Microsoft.AspNetCore.Http.IFormFile的实例。类型是接口或抽象类,无法实例化”
我认为问题是我的服务发布方法...
这是我的userService帖子方法:
postUser(userFormAdd: FormGroup,file): Observable<Boolean> {
let input = new FormData();
input.append("file", file);
let data = {
user: userFormAdd.value,
fileData: input,
};
return this.http.post<Boolean>(AppSettings.URL + "/users/", data);
}
我在UserViewModel中组合了用户模型和文件:
public class UserCreationViewModel
{
public User user { get; set; }
public IFormFile fileData { get; set; }
}
我的控制器发布方法甚至都没有被调用:
[HttpPost]
public async Task<IActionResult> PostUser([FromBody]UserCreationViewModel userViewModel)
{
var test = await _siteService.CreateUser(userViewModel);
return Ok();
}
我希望在控制器方法中通过IFormFile和Form值检索我的图片,但实际上我只有400错误
预先感谢
答案 0 :(得分:0)
尝试以下一项:
let input = new FormData();
input.append("file", file);
input.append("user", userFormAdd.value);
return this.http.post<Boolean>(AppSettings.URL + "/users/", input);
如果仍然存在问题,请分割您的UserFormAdd项并追加到FormData()
答案 1 :(得分:0)
我有了一些新的东西,我使用了[FromForm],并且正在使用FileData进入Controller方法,但是User FormGroup仍然为空。
[HttpPost]
public async Task<IActionResult> PostUser([FromForm]UserCreationViewModel userViewModel)
{
var test = await _siteService.CreateUser(userViewModel);
return Ok();
}
我的服务
postUser(userFormAdd: FormGroup,file) {
let input = new FormData();
input.append("file", file);
input.append("user",userFormAdd.value);
return this.http.post<Boolean>(AppSettings.URL + "/users/", data).subscribe();
}
我试图对FormGroup值进行字符串化处理,但没有成功。
编辑-解决方案:
我在“输入”中传递了FormGroup的每个字段,所以我们遇到了这样的事情:
postUser(userFormAdd: FormGroup,file) {
let input = new FormData();
input.append("file", file);
input.append("name",userFormAdd.value.name);
input.append("city",userFormAdd.value.city);
input.append("address",userFormAdd.value.address);
return this.http.post<Boolean>(AppSettings.URL + "/users/", data).subscribe();
}
不要忘记使用添加的每个字段来更新控制器viewModel