Задать вопрос
@semiglazov_tes
делаю первые шаги в IT

Проблемы при реализации авторизации в режиме Forms в MVC 5?

Всем добрый вечер. Изучаю ASPNet MVC5 на основе чтения Metanit и реализации небольшого pet project- этакий HH но в очень упрощённой форме.
Возникла проблема при создании системы аутенфикации "Соискателя" в режиме Forms.
1. В файле web.config включил аутенфикацию Forms:
<authentication mode="Forms">
                       <forms name="cookies" timeout="2880" loginUrl="~/Home/Index" />
                 </authentication>

2. Также в файле web.config добавил строку подключения для EntityFramework:
<add name="JobSeekerRegistrationContext" connectionString="Data Source= 
                         (LocalDB)\MSSQLLocalDB;AttachDbFilename='|DataDirectory|\FormsAuthJobSeeker.mdf'; Initial 
                          Catalog=FormsAuthJobSeeker;Integrated Security=True"

3. Создал модель "Соискателя":
public class JobSeeker
                        {
                        //Идентификационный номер соискателя
                       public int JobSeekerID { get; set; }

                       //Фамилия соискателя
                      public string LastName { get; set; }

                      //Имя соискателя
                     public string FirstName { get; set; }

                     //Электронная почта
                    public string Email { get; set; }
                    
                    //Пароль
                   public string Password { get; set; }
                   }


4. Создаю контекст данных для взаимодействия с БД:
public class JobSeekerContext: DbContext
                       {
                       public JobSeekerContext():base("JobSeekerRegistrationContext") { }
                       public DbSet<JobSeeker> JobSeekers { get; set; }
                        }

5. Создаю модель для регистрации соискателя:
public class JobSeekerRegistration
                      {
        
                     //фамилия соискателя
                    [Required]
                    public string LastName { get; set; }

                   //Имя соискателя
                  [Required]
                  public string FirstName{ get; set; }

                 //Почта
                [Required]
                public string Email { get; set; }

               //Пароль
               [Required]
               [DataType(DataType.Password)]
               public string Password { get; set; }
               }

6.Создал форму для регистрации "Соискателя". Форма представляет собой модальное окно в
представлении Index,которая является домашней страницей моего приложения. При нажатии на
кнопку Регистрации данное модальное окно будет отображаться:
<form id="authtorization_joobseeker_form" action="/JobSeekerAccount/Register" method="post">
                <p id="last_name">
                    <label id="joobseeker_last_name" for="joobseeker_last_name">Фамилия</label>
                    <input id="joobseeker_last_name" type="text" name="LastName">
                </p>
                <p id="first_name">
                    <label id="joobseeker_first_name" for="joobseeker_first_name">Имя</label>
                    <input id="joobseeker_first_name" type="text" name="FirstName">
                </p>
                <p id="mail">
                    <label id="joobseeker_mail" for="joobseeker_mail">Email</label>
                    <input id="joobseeker_mail" type="mail" name="Email">
                </p>
                <p id="password">
                    <label id="joobseeker_password" for="joobseeker_password">Пароль</label>
                    <input id="joobseeker_password" type="password" name="Password">
                </p>
                <input id="authtorization_joobseeker_submit" class="submit" type="submit" value="Регистрация">
            </form>

7. Создал контроллер JobSeekerAccount с методом Register, который должен принимать данные
из POST запроса, который представлен выше и сохранять информацию в БД:
public class JobSeekerAccount : Controller
                  {
                  // GET: JobSeekerAccount

                  [HttpPost]
                  public ActionResult Register(JobSeekerRegistration model)
                  {
                  if (ModelState.IsValid)
                  {
                   JobSeeker jobSeeker = null;
                   using (JobSeekerContext db = new JobSeekerContext())
                   {
                    jobSeeker = db.JobSeekers.FirstOrDefault(JobSeeker => JobSeeker.LastName == model.LastName);
                   } 
                   if (jobSeeker==null)
                   {
                    using (JobSeekerContext db = new JobSeekerContext())
                    {
                        db.JobSeekers.Add(new JobSeeker { LastName = model.LastName, FirstName = model.FirstName, Email = model.Email, Password = model.Password });
                        db.SaveChanges();
                        jobSeeker = db.JobSeekers.Where(JobSeeker => JobSeeker.Email == model.Email && JobSeeker.Password == model.Password).FirstOrDefault();
                    }
                    if (jobSeeker != null)
                    {
                        FormsAuthentication.SetAuthCookie(model.Email, true);
                        return RedirectToAction("Index", "Home");
                    }    
            }    
            return View(model);


8. Сборка собирается без ошибок. После ввода данных и отправки формы отображается следующая ошибка:

Ошибка сервера в приложении '/'.
Не удалось найти данный ресурс.
Описание: HTTP 404. Возможно, искомый ресурс (или одна из его зависимостей) удален, получил другое имя или временно недоступен. Просмотрите следующий URL-адрес и проверьте, что он введен правильно.

Запрошенный URL: /JobSeekerAccount/Register

Информация о версии: Платформа Microsoft .NET Framework, версия:4.0.30319; ASP.NET, версия:4.8.4261.0

БУДУ БЛАГОДАРЕН ЗА ЛЮБУЮ ПОМОЩЬ!
  • Вопрос задан
  • 156 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
https://docs.microsoft.com/ru-ru/aspnet/mvc/overvi...

Скорее всего дело в контроллере, он не имеет нужного окончания, в статье есть описание почему это так
Ответ написан
@Jewish_Cat
Увлекаюсь C#
Startup.cs покажи
скорее всего не пропустил этап с роутингом
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы