protected IActionResult CreateResource <TCreateDto, TGetDto>(TCreateDto createDto) where TCreateDto : ICreateDto <TEntity> where TGetDto : IGetDto <TEntity> { if (createDto == null) { return(BadRequest(InvalidData())); } if (!ModelState.IsValid) { return(BadRequest(InvalidData())); // TODO: -- 400 missing required fields, consider mentioning which } var resource = Map <TEntity>(createDto); var result = ResourceDataService.AreRelationshipsValid(resource); if (!result.IsValid) { return(NotFound(ParentNotFound(result.NotFoundParentId))); } ResourceDataService.Create(resource); ResourceDataService.SaveChanges(); CreatedResource = resource; var resourceToReturn = Map <TGetDto>(resource); return(CreatedAtRoute(_getResourceRouteName, new { id = resourceToReturn.Id }, resourceToReturn)); }