С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
1

System.NullReferenceException при создании пользователя в БД

12.10.2016, 21:34. Просмотров 1072. Ответов 6
Метки нет (Все метки)

всем доброго времени суток, помогите пожалуйста разобраться, изучаю mvc и наткнулся с проблемой создания пользователя в БД, все делал по примеру, но при вводе пароля получаю вот такое письмо в браузере:
Ссылка на объект не указывает на экземпляр объекта. Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

Сведения об исключении: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.

Ошибка источника:
Строка 32: {
Строка 33: ApplicationUser user = new ApplicationUser { UserName = model.Email, Email = model.Email};
Строка 34: IdentityResult result = await UserManager.CreateAsync(user, model.Password);
Строка 35: if (result.Succeeded)
Строка 36: {
ошибка в 34 строке. Ниже приведу все что я делал по уроку. В папке Models создаю класс с именем ApplicationContext:
C#
1
2
3
4
5
6
7
8
9
10
11
public class ApplicationContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationContext() : base("HomeBDConnectionString") { }
 
       // public DbSet<RegisterModel> RegisterModels { get; set; }
 
        public static ApplicationContext Create()
        {
            return new ApplicationContext();
        }
    }
Затем ApplicationUser:
C#
1
2
3
4
5
6
7
public class ApplicationUser : IdentityUser
    {
        public ApplicationUser()
        {
 
        }
    }
Затем ApplicationUserManager:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ApplicationUserManager : UserManager<ApplicationUser>
    {
        public ApplicationUserManager(IUserStore<ApplicationUser> store)
                : base(store)
        {
        }
        public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options,
                                                IOwinContext context)
        {
            ApplicationContext db = context.Get<ApplicationContext>();
            ApplicationUserManager manager = new ApplicationUserManager(new UserStore<ApplicationUser>(db));
            return manager;
        }
    }
Далее модель регистрации RegisterModel:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class RegisterModel
    {
        [Required]
        public string Email { get; set; }
 
        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }
 
        [Required]
        [Compare("Password", ErrorMessage = "Пароли не совпадают")]
        [DataType(DataType.Password)]
        public string PasswordConfirm { get; set; }
 
    }
Далее в папке App_start создаю класс Startup:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // настраиваем контекст и менеджер
            app.CreatePerOwinContext<ApplicationContext>(ApplicationContext.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
            });
        }
    }
После сам контроллер AccountController:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class AccountController : Controller
    {
        private ApplicationUserManager UserManager
        {
            get
            {
                return HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
            }
        }
        // GET: Account
        public ActionResult Register()
        {
            return View();
        }
 
        [HttpPost]
        public async Task<ActionResult> Register(RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                ApplicationUser user = new ApplicationUser { UserName = model.Email, Email = model.Email};
                IdentityResult result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    return RedirectToAction("Login", "Account");
                }
                else
                {
                    foreach (string error in result.Errors)
                    {
                        ModelState.AddModelError("", error);
                    }
                }
            }
            return View(model);
        }
    }
и наконец View Register:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@model WebHome.Models.RegisterModel
 
@{
    ViewBag.Title = "Register";
}
 
<h2>Регистрация</h2>
 
 
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
 
    <div>
        <h4>Регистрация пользователя</h4>
        <hr />
        @Html.ValidationSummary(false)
 
        <div>
            Электронный адрес
            <div>
                @Html.EditorFor(model => model.Email)
            </div>
        </div>
 
        <div>
            Пароль
            <div>
                @Html.EditorFor(model => model.Password)
            </div>
        </div>
 
        <div>
            Подтвердить пароль
            <div>
                @Html.EditorFor(model => model.PasswordConfirm)
            </div>
        </div>
 
        <div>
            <div>
                <input type="submit" value="Зарегистрировать" />
            </div>
        </div>
    </div>
}
web.config:
XML
1
2
3
4
<connectionStrings>
    <add name="HomeBDConnectionString" connectionString="Data Source=ETHERNETS-ПК\WINCCFLEXEXPRESS;Initial Catalog=HomeBD;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
Когда я сделал точку останова, то увидел что UserManager == null отсюда и исключение, помогите разобраться почему UserManager равен null как это вылечить, или что я упустил ? Спасибо
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2016, 21:34
Ответы с готовыми решениями:

Исключение типа "System.NullReferenceException" при сохранении данных
Добрый вечер! Строго не судите,только учусь. Проблема заключается в следующем:...

Как исправить исключение System.NullReferenceException в коде?
Здравствуйте, пытаюсь разобраться в чужом коде, возникает ошибка...

Ошибка в классе в работе с БД MSSQL2014: Исключение типа "System.NullReferenceException"
Здравствуйте. есть небольшой класс для работы с моей бд.я только изучаю и...

Ошибка при создании отчета
День добрый с помощью такой конструкции пытаюсь вывести отчет на экран ...

При создании б/д выходит ошибка
Почему выходит ошибка при создании б/д

6
Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
12.10.2016, 21:35  [ТС] 2
System.NullReferenceException при создании пользователя в БД
0
IamRain
1380 / 1233 / 388
Регистрация: 02.08.2011
Сообщений: 3,633
12.10.2016, 21:42 3
Лучший ответ Сообщение было отмечено Dostik как решение

Решение

Возможно ваш случай:
The fix was an unsatisfactory one.

Uninstalling all the Nuget packages relating to Owin and Identity, commenting out everything that doesn't build and then restarting Visual Studio, cleaning and rebuilding and then reinstalling the packages again.

When they are installed, for some reason they aren't the latest so you need to go back any upgrade them all.

Now uncomment everything again and rebuild. Suddenly, it works!

Not a good solution.
Просто переустановить все nuget Owin-a.
1
Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
12.10.2016, 22:35  [ТС] 4
IamRain, От части вы были правы, я создал обычный проект MVC с типом аутентификации No Authentication. и руками добавил :
Microsoft.AspNet.Identity.EntityFramework

Microsoft.AspNet.Identity.OWIN

Microsoft.Owin.Host.SystemWeb

И вуаля всё работает, странная фиговина. Спасибо большое, целый день потерял +1 жамкнул
0
IamRain
1380 / 1233 / 388
Регистрация: 02.08.2011
Сообщений: 3,633
12.10.2016, 22:48 5
Да не за что.
0
sau
1996 / 1613 / 265
Регистрация: 22.07.2011
Сообщений: 6,092
Завершенные тесты: 1
13.10.2016, 11:45 6
По идее , если дело было в отсутствии сборок , то студия ругнулась бы еще на этапе компиляции на не обьявленные типы.
Причем тут null не понятно , и как вообще он там может быть , когда явно создается экземпляр.
- разве что owin контекст не сохраняет у себя переданный экземпляр если ему чего то не хватило , что тоже было бы странно.
0
Dostik
38 / 38 / 4
Регистрация: 31.05.2011
Сообщений: 580
13.10.2016, 16:03  [ТС] 7
sau, все сборки были подключены, vs не ругалась, помогло в 1 варианте удаление сборок которые vs подключает автоматом, затем заново подключить через nuget, либо создать как я уже говорил выше проект не включая в него authentication, и так же затем ручками добавить в проект нужные сборки. И вот почему так происходит я честно говоря и не знаю, причем такая проблема на двух разных ПК одинакова. Среда разработки VS2015 enterprice 3 update
0
13.10.2016, 16:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2016, 16:03

Ошибка при создании проекта
Вот такая ошибка при создании пустого веб приложения asp.net и библиотеки...

Ошибка при создании представления
Всем здравствуйте! Проблема заключается в том, что при создании представления...

Дилемма при создании навигации
Господа, всем доброго времени суток, у меня тупой вопрос, основанный на смутных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru