Il n'y a rien de mal avec le code. await
signifie que l'exécution continue seulement après la méthode asynchrone qui suit se termine. Cela signifie que dans cet extrait:
var user = await userManager.FindAsync(context.UserName, context.Password)
var roles = await userManager.GetRolesAsync(user.Id);
l'appel à GetRolesAsync
ne sera exécutée que après la ligne précédente est terminée.
D'après la documentation de UserManager.FindAsync
Renvoie un utilisateur avec le nom d'utilisateur spécifié et mot de passe ou null s'il n'y a pas de correspondance.
Le nom d'utilisateur ou le mot de passe est erroné. Renvoyez juste un message à l'utilisateur final lui demandant de réessayer. Si vous passez cet appel en utilisant des informations d'identification stockées, vérifiez-les à nouveau.
Dans tous les cas, vous devez vérifier un échec d'authentification avant d'essayer d'utiliser la valeur user
, par exemple: (! User = null)
var user = await userManager.FindAsync(context.UserName, context.Password)
if (user == null)
{
//Somehow report failure, decrement retry counters, etc
retries--;
return false;
}
else
{
var roles = await userManager.GetRolesAsync(user.Id);
....
}
Que diriez-vous de vérifier '' 'si {/ * faire vos affaires * /} '' '' ''? – tym32167
Assez sûr que cela n'a rien à voir avec être asynchrone, le mot-clé 'await' devrait prendre soin de mettre en pause l'exécution. Êtes-vous sûr que l'appel pour que ApplicationUser réussisse? On dirait que ça retourne null. – Equalsk
Vous n'avez rien à faire - la ligne suivante sera exécutée ** UNIQUEMENT ** après la fin de la recherche de FindAsync. si 'roles' n'est pas ce que vous attendez, vérifiez les problèmes de codage ou de données, pas de problèmes avec async –