// POST: api/Roles
        public async Task <IActionResult> Post(
            [FromBody] RoleForManipulationDto roleDto,
            [FromHeader(Name = "Accept")] string mediaType)
        {
            var response = await businessLogic.CreateRole(roleDto, mediaType);

            if (response.IsSuccessful)
            {
                var responseAsRoleDto = (GenericResponse <IDictionary <string, object> >)response;
                return(CreatedAtRoute("GetRole",
                                      new { id = responseAsRoleDto.Result["Id"] },
                                      responseAsRoleDto.Result));
            }

            var responseAsIdentityResult = (GenericResponse <IdentityResult>)response;

            return(BadRequest(responseAsIdentityResult.Result));
        }
        public async Task <GenericResponse> CreateRole(RoleForManipulationDto role, string mediaType)
        {
            try
            {
                if (!MediaTypeHeaderValue.TryParse(mediaType,
                                                   out MediaTypeHeaderValue parsedMediaType))
                {
                    return(GenericResponseBuilder.NoSuccess("Wrong media type"));
                }
                var roleEntity = this.mapper.Map <IdentityRole>(role);
                var result     = await this.dataService.RoleManager.CreateAsync(roleEntity);

                if (!result.Succeeded)
                {
                    return(GenericResponseBuilder.NoSuccess <IdentityResult>(result));
                }

                var roleToReturn = this.mapper.Map <RoleDto>(roleEntity)
                                   .ShapeData()
                                   as IDictionary <string, object>;;

                var includeLinks = parsedMediaType.SubTypeWithoutSuffix
                                   .EndsWith("hateoas", StringComparison.InvariantCultureIgnoreCase);

                if (includeLinks)
                {
                    var links = CreateLinksForRole(Guid.Parse(roleEntity.Id));
                    roleToReturn.Add("links", links);
                }

                return(GenericResponseBuilder.Success <IDictionary <string, object> >(roleToReturn));
            }
            catch (Exception ex)
            {
                logger.LogError(string.Format("Error in BLL - CreateRole. {0}", ex.Message));
                return(GenericResponseBuilder.NoSuccess <IDictionary <string, object> >(null, ex.Message.ToString()));
            }
        }