2017-10-03 2 views
0

J'obtiens cette erreur:Le nom ne peut être nul ou vide: _userManager.CreateAsync

Name cannot be null or empty

tout en faisant un appel POST: https://localhost:44346/api/account/register. _userManager.CreateAsync ne l'aime pas pour une raison quelconque.

Mon code:

UserModel.cs Classe:

public class UserModel : IdentityUser 
    { 
     [Required] 
     [Display(Name = "User name")] 
     public string UserName { get; set; } 

     [Required] 
     [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
     [DataType(DataType.Password)] 
     [Display(Name = "Password")] 
     public string Password { get; set; } 

     [DataType(DataType.Password)] 
     [Display(Name = "Confirm password")] 
     [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
     public string ConfirmPassword { get; set; } 
    } 

AccountController.cs:

// POST api/Account/Register 
     [AllowAnonymous] 
     [Route("Register")] 
     public async Task<IHttpActionResult> Register(UserModel userModel) 
     { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      IdentityResult result = await _repo.RegisterUser(userModel); 

      IHttpActionResult errorResult = GetErrorResult(result); 

      if (errorResult != null) 
      { 
       return errorResult; 
      } 

      return Ok(); 
     } 

classe AuthRepository où RegisterUser est mis en œuvre:

private AuthContext _ctx; 

     private UserManager<UserModel> _userManager; 

     public AuthRepository() 
     { 
      _ctx = new AuthContext(); 
      _userManager = new UserManager<UserModel>(new UserStore<UserModel>(_ctx)); 
     } 
public async Task<IdentityResult> RegisterUser(UserModel userModel) 
     { 
      UserModel user = new UserModel 
      { 
       UserName = userModel.UserName 
      }; 

      try 
      { 
       var result = await _userManager.CreateAsync(user, userModel.Password); 

       return result; 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e); 
       throw; 
      } 

     } 

Wha t Je ne comprends pas pourquoi je reçois cette erreur "Nom ne peut pas être nul" lorsque je l'attribue clairement.

Ce que j'ai essayé jusqu'à présent: 1. Ajout d'un nouveau nom de la propriété dans mes UserModel.cs 2. Suppression UserName de la classe userModel comme suggéré ici Name cannot be null or empty. asp.net identity mvc 5 + EntityFreamwork mais qui me donne une autre exception (userModel n'existe pas dans le contexte).

Je suis en train de mettre en œuvre OAuth comme le suggère ici: http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/ Son code source: https://github.com/tjoudeh/AngularJSAuthentication

S'il vous plaît aider. Editer: Je vois 2 propriétés UserName pour une raison quelconque et 1 d'entre elles est nulle. Est-ce la raison pour laquelle je vois une erreur?

enter image description here

+0

Juste curieux - dans la classe AuthRepository -> méthode RegisterUser - pourquoi vous réaffectez userModel à une nouvelle instance de UserModel (utilisateur)? – Rex

+0

J'essayais juste quelques choses. J'ai oublié de le commenter. – 90abyss

+0

Ok. Alors, à quel point vous obtenez cette exception? Si vous pouviez poster une pile trace d'exception qui aide à comprendre. – Rex

Répondre

0

Utiliser la chaîne de connexion ADO.NET au lieu de EntityFramework un, et ce problème se résoudra.