Имя не может быть нулевым или пустым: _userManager.CreateAsync

Я получаю эту ошибку:

Имя не может быть нулевым или пустым

при выполнении вызова POST: https://localhost:44346/api/account/register. _userManager.CreateAsync почему-то не нравится.

Мой код:

Класс UserModel.cs:

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();
        }

Класс AuthRepository, в котором реализован RegisterUser:

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;
            }

        }

Чего я не понимаю, так это почему я получаю эту ошибку «Имя не может быть нулевым», когда я четко назначаю его.

Что я пробовал до сих пор: 1. Добавление имени нового свойства в мой UserModel.cs 2. Удаление имени пользователя из класса UserModel, как предлагается здесь Имя не может быть нулевым или пустым. asp.net identity mvc 5 + EntityFreamwork, но это дает мне другое исключение (UserModel не существует в контексте).

Я пытаюсь реализовать OAuth, как предлагается здесь: http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/ Его исходный код: https://github.com/tjoudeh/AngularJSAuthentication

Пожалуйста помоги.

Изменить: по какой-то причине я вижу 2 свойства UserName, и 1 из них имеет значение null. Это причина, по которой я вижу ошибку?

введите здесь описание изображения


person 90abyss    schedule 03.10.2017    source источник
comment
Просто любопытно - в классе AuthRepository -> метод RegisterUser - почему вы переназначаете userModel новому экземпляру UserModel (пользователю)?   -  person Rex    schedule 03.10.2017
comment
Я просто пробовал кое-что. Забыл прокомментировать.   -  person 90abyss    schedule 03.10.2017
comment
В порядке. Итак, в какой момент вы получаете это исключение? Если бы вы могли опубликовать трассировку стека исключения, это поможет понять.   -  person Rex    schedule 03.10.2017
comment
Я не получаю исключения. Но когда вызывается _userManager.CreateAsync, результирующая переменная имеет сообщение об ошибке внутри него, читая, что имя не может быть нулевым или пустым.   -  person 90abyss    schedule 03.10.2017


Ответы (1)


Используйте строку подключения ADO.NET вместо строки EntityFramework, и эта проблема решится сама собой.

person 90abyss    schedule 03.10.2017