Как загрузить файл с данными из angular 8 в ASP.NET ядро 3 веб-api
Всем Привет,
Я создал веб-API .net core(v3) и угловой проект, поэтому я пытаюсь отправить объект, который будет содержать файл и другие данные (например, имя, продолжительность и т. д.).
Мой код углового компонента:-
saveMovie() { this.submitted = true; if (this.movieFormGp.invalid) { return; } this.movieFormGp.patchValue({ rating: this.currentRate }); let movieData= new FormData(); movieData.append("name", this.movieFormGp.get('name').value); movieData.append("Duration", this.movieFormGp.get('duration').value); movieData.append("Review", this.movieFormGp.get('review').value); movieData.append("GenresIDs",JSON.stringify( [4,6])); movieData.append("PosterImg",this.posterImage); console.log(movieData); this.movieService.addMovie(movieData).subscribe((resp)=>{ console.log(resp); },error=>{ console.error(error); }) }
Угловой код Серви:-
headers={ headers: new HttpHeaders({ 'enctype': 'multipart/form-data', 'Accept': 'application/json' }) }; addMovie(movie:any) { return this.http.post<any>(environment.baseAPIUrl+'Movies/addMovie',movie); }
.сетевая модель:-
public class CreateMovieDTO { public int Id { get; set; } [Required] public string Name { get; set; } public string Duration { get; set; } public string Review { get; set; } public List<int> GenresIDs { get; set; } public bool IsFavorite { get; set; } public DateTime AddedOn { get; set; } public IFormFile PosterImg { get; set; } public CreateMovieDTO() { GenresIDs = new List<int>(); } }
Метод API:-
[Route("api/[controller]")] [ApiController] [AllowAnonymous] public class MoviesController : ControllerBase { private readonly IMovieRepository _repository; private readonly DataContext _context; public MoviesController(IMovieRepository repository, DataContext context) { _repository = repository; _context = context; } [HttpPost("addMovie")] public async Task<IActionResult> AddMovie([FromForm] CreateMovieDTO movieDTO) { try { if (movieDTO == null) { return BadRequest("object is null"); } var reqFile = Request.Form.Files; var movie = new Movie() { Name = movieDTO.Name, Duration = movieDTO.Duration, Review = movieDTO.Review, }; foreach (var item in movieDTO.GenresIDs) { var genre = await _repository.GetGenre(item); movie.MovieGenres.Add(new MovieGenres { Genres = genre, Movie = movie }); } _repository.Add<Movie>(movie); var response = await _repository.SaveAll(); return Ok(response); } catch (Exception exp) { return BadRequest(exp); } } }
Что я уже пробовал:
Если я пошлю только Данные JSON без файла и [FromBody] тогда это работает нормально, но если я добавлю файл с виде FormData затем в методе API все свойства равны нулю хотя его ударил метод APi.
если я использую [Из формы] с formdata тогда он попадает не в метод API, а в Сеть его показывает статус 200
Пожалуйста помочь..
Заранее спасибо.
Джаянта