public ActionResult <PersonalUserCreatedConfirmationDto> CreateUser([FromBody] PersonalUserCreationDto personalUser) { try { PersonalUser userEntity = _mapper.Map <PersonalUser>(personalUser); PersonalUserCreatedConfirmation userCreated = _personalUsersService.CreateUser(userEntity, personalUser.Password); string location = _linkGenerator.GetPathByAction("GetUserById", "PersonalUser", new { userId = userCreated.UserId }); return(Created(location, _mapper.Map <PersonalUserCreatedConfirmationDto>(userCreated))); } catch (Exception ex) { if (ex.GetType().IsAssignableFrom(typeof(ForeignKeyConstraintViolationException))) { return(StatusCode(StatusCodes.Status409Conflict, ex.Message)); } if (ex.GetType().IsAssignableFrom(typeof(UniqueValueViolationException))) { return(StatusCode(StatusCodes.Status422UnprocessableEntity, ex.Message)); } if (ex.GetBaseException().GetType() == typeof(SqlException)) { Int32 ErrorCode = ((SqlException)ex.InnerException).Number; switch (ErrorCode) { case 2627: // Unique constraint error break; case 547: // Constraint check violation; FK violation return(StatusCode(StatusCodes.Status422UnprocessableEntity, ex.Message)); case 2601: // Duplicated key row error; Unique violation return(StatusCode(StatusCodes.Status409Conflict, ex.Message)); default: return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message)); } } return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message)); } }