有没有一种方法可以将File和FormGroup发布到我的API?

时间:2019-04-26 10:44:48

标签: angular api .net-core

我实际上正在使用.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错误

预先感谢

2 个答案:

答案 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