[ProducesResponseType(typeof(BlogPostDTO), StatusCodes.Status201Created)] //[Note] Co definiuje się w takich przypadkach jako typ zwracany? Muszę podawać zawsze typ rzeczywisty, bo interface nie może być obiektem typeof? ODP: tak, podaje się typ rzeczywisty public async Task <IActionResult> Post([FromBody] BlogPostDTO postToAdd) //[note] Czy tutaj to FromBody jest konieczne? Czy domyślnie typy złożone nie powinny być odczytywane z body? ODP: nie jest konieczne, bo domyślnie są odczytywane z body, ale poprawia czytelność { //TODO: [Przekazać Id - sprawdzić foreign key EF]?? Czy w jakiś sposób mam tutaj przetwarzać typy referencyjne (np. jak z postmana chcę dodać post z autorem już istniejącym, to czy muszę zawsze podawać wszystkie pola, czy mogę podać id?) //np. mam sprawdzać id autora w DTO i jeśli != 0 to próbować go znaleźć w kontekście i przypisać? logger.LogInformation("Calling post for the following object: {@0} ", postToAdd); //?? Czy przy tym nie ma tej automatycznej weryfikacji modelu? W body post'a miałem więcej pól i wszystko przeszło. Czy da się wymusić kontrolę 1:1 (żeby body było w 100% zgodne z modelem? // postToAdd.Modified = DateTime.Now.ToLongDateString(); BlogPost addedPost = await repository.AddAsync(mappingProvider.Map <BlogPostDTO, BlogPost>(postToAdd)); var addedPostDTO = mappingProvider.Map <BlogPostDTO>(addedPost); //[Note] - w tego typu aplikacjach narzut wynikający z mapowania jest powszechnym i akceptowanym minusem, bo mapowanie jest konieczne - Czy to podwójne mapowanie nie jest już za dużym narzutem na taką akcję? return(CreatedAtRoute("GetBlog", new { id = addedPost.Id }, addedPostDTO)); //[note] W jaki sposób przerobić to na pojedynczy punkt wyjścia? Czy jest jakiś typ wspólny dla tych helpersów i czy tak się w ogóle robie w web dev'ie? ODP: nie stosuje się tego podejścia w aplikacjach web'owych //[Note] - createAtRoute wysyła URL w header'ze i stamtąd można odczytać adres - Czy ten middleware CreatedAtRoute nie powienien zwracać też URL'a do nowego obiektu? Postman pokazuje tam tylko w JSON'ie body tego obiektu.s }
public async Task <IActionResult> Create(PostEditViewModel newBlogPostModel, IFormCollection collection) { try { if (!ModelState.IsValid) { return(View(newBlogPostModel)); } BlogPost newBlogPost = newBlogPostModel.BlogPost; newBlogPost.PostDate = DateTime.Now; newBlogPost.ModifiedDate = DateTime.Now; await _blogPostRepository.AddAsync(newBlogPost); var editId = newBlogPostModel.BlogPost.BlogPostId; return(RedirectToAction("Edit", new { id = editId })); } catch (Exception ex) { Console.WriteLine(ex.Message); } return(View(newBlogPostModel)); }
public async Task Post([FromBody] BlogPost post) { await _postsRepo.AddAsync(post); }