System.NullReferenceException podczas sprawdzania warunku

0

Witam chciałbym sprawdzić czy istnieje już taki username podany przez użytkownika, jeśli istnieje ma zwrócić true jeśli nie false.

        [HttpGet]
        [AllowAnonymous]
        [Route("api/TakeUserName/{username}")]
        public IHttpActionResult TakeUserName(string username) 
        {
            var userStore = new UserStore<ApplicationUser>(new ApplicationDbContext());
            var manager = new UserManager<ApplicationUser>(userStore);

            var result = userStore.FindByNameAsync(username);

           return (result == null )  ? Ok(false) : Ok( !string.IsNullOrEmpty(result.Result.UserName));

        }

Dla istniejącej wartości username zwraca true tak jak powinno być, ale dla nie istniejącej wartości wyrzuca System.NullReferenceException a powinno zwrócić false.

1

Poczytaj o debuggowaniu kodu, pozwala rozwiązac takie problemy w kilka sekund.

W warunku powinieneś sprawdzać czy result.Result jest nullem, bo to tam jest przechowywany potencjalny użytkownik.

return (result.Result == null )  ? Ok(false) : Ok( !string.IsNullOrEmpty(result.Result.UserName));
0

Dodanie async i await także rozwiązało problem

       [HttpGet]
        [AllowAnonymous]
        [Route("api/TakeUserName/{username}")]
        public async Task<IHttpActionResult> TakeUserName(string username) 
        {
            var userStore = new UserStore<ApplicationUser>(new ApplicationDbContext());
            var manager = new UserManager<ApplicationUser>(userStore);

            var result = await  userStore.FindByNameAsync(username);

            //return (result.Result == null) ? Ok(false) : Ok(!string.IsNullOrEmpty(result.Result.UserName));
          return (result == null )  ? Ok(false) : Ok( !string.IsNullOrEmpty(result.UserName));

        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0