public async Task <IActionResult> EditTodoItem(EditTodoItemViewModel editTodoItemViewModel) { if (!ModelState.IsValid) { return(View()); } // create an TodoItemForUpdateViewModel instance var todoItemForUpdateViewModel = new TodoItemForUpdateViewModel { Name = editTodoItemViewModel.Name, IsComplete = editTodoItemViewModel.IsComplete }; // serialize it var serializedTodoItemForUpdateViewModel = JsonConvert.SerializeObject(todoItemForUpdateViewModel); // call the API var httpClient = await _iTodoApiHttpClient.GetClient(); var response = await httpClient.PutAsync( $"api/todoitems/{editTodoItemViewModel.Id}", new StringContent(serializedTodoItemForUpdateViewModel, Encoding.Unicode, "application/json")) .ConfigureAwait(false); return(HandleApiResponse(response, () => RedirectToAction("Index"))); }
public IActionResult UpdateTodoItem(long id, [FromBody] TodoItemForUpdateViewModel todoItemForUpdateViewModel) { var ownerId = User.Claims.FirstOrDefault(claim => claim.Type == "sub")?.Value; // this is how we know who the current user is. if (!_todoRepository.IsTodoItemOwner(id, ownerId)) { return(StatusCode(403)); } if (todoItemForUpdateViewModel == null) { return(BadRequest()); } if (!ModelState.IsValid) { // return 422 - Unprocessable Entity when validation fails return(new UnprocessableEntityObjectResult(ModelState)); } var todoItem = _todoRepository.GetTodoItem(id); if (todoItem == null) { return(NotFound()); } Mapper.Map(todoItemForUpdateViewModel, todoItem); _todoRepository.UpdateTodoItem(todoItem); if (!_todoRepository.Save()) { throw new Exception($"Updating todoitem with {id} failed on save."); } return(NoContent()); }