как удалить пользователей, включая роли и пользователей из AspnetRoleUsers - PullRequest
0 голосов
/ 30 апреля 2020

Я делаю проект, используя asp.net core 3.1, и я не могу найти правильный источник удаления пользователей, включая роли в Asp.net core 3.1, используя Web.api

Это код, который я пробовал, но похоже не подходит, но еще не пробовал. У вас есть идеи, как это реализовать? Я хочу надлежащим образом проверить ошибку, используя функции Web Api, такие как код состояния или любые сообщения об ошибках в веб-интерфейс.

[HttpPost, ActionName("Delete")]
public async Task<ActionResult> DeleteUser(string id)
{


    var user = await _userManager.FindByIdAsync(id);
    var rolesForUser = await _userManager.GetRolesAsync(user); 
    if (rolesForUser.Count() > 0)
    {
        foreach (var item in rolesForUser.ToList())
        {
            // item should be the name of the role
            var result = await _userManager.RemoveFromRoleAsync(user, item);
        }
    }

    await _userManager.DeleteAsync(user);  
    return OkResult(result);
}


1 Ответ

0 голосов
/ 30 апреля 2020

Вам не нужно l oop ролей и удалять, вы можете использовать RemoveFromRolesAsync:

public virtual Task<IdentityResult> RemoveFromRolesAsync(TUser user, IEnumerable<string> roles);

И каждая операция вернет IdentityResult, который может быть использован для проверки операции статус:

if (User.Identity.IsAuthenticated)
{
    try
    {
        var user = await _userManager.FindByIdAsync(id);
        var roles= await _userManager.GetRolesAsync(user);  

        var result =  await _userManager.RemoveFromRolesAsync(user, roles);
        if (result.Succeeded)
        {
            var resultdelete = await _userManager.DeleteAsync(user);
            if (result.Succeeded)
            {
                return Ok();
            }
            else
            {
                List<string> errors = new List<string>();
                foreach (var error in result.Errors)
                {
                    errors.Add(error.Description);
                }
                return BadRequest(errors);

            }
        }
        else
        {
            List<string> errors = new List<string>();
            foreach (var error in result.Errors)
            {
                errors.Add(error.Description);
            }
            return BadRequest(errors);
        }
    }
    catch (Exception exception)
    {
        List<string> errors = new List<string>() { exception.Message };
        return StatusCode(StatusCodes.Status500InternalServerError, errors);
    }
}

Но использовать хранимые процедуры базы данных с транзакцией всегда хороший выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...