Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / не работает вызов метода другого контроллера MVC / 12 сообщений из 12, страница 1 из 1
23.12.2015, 14:14
    #39136021
Bobby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Всем доброго дня. Просьба сильно не пинать, я новичок в MVC. Пытаюсь вызвать действия из другого контроллера.
Вот код метода Index Из контроллера Home:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class HomeController : Controller
    {
        //
        // GET: /Home/
        [Authorize] 
        public ActionResult Index()
        {
            ViewBag.user_name = AccountController.user_name;
            ViewBag.role_name = AccountController.role_name;
            ViewBag.user_id = AccountController.user_id;
            ViewBag.role_id = AccountController.role_id;
            return View();
        }

    }


При запуске как положено срабатывает метод Login контроллера Account, в котором вызывается представление на ввод логина и пароля:
Код: c#
1.
2.
3.
4.
5.
6.
        // GET: /Account/Login
        [AllowAnonymous]
        public ActionResult Login()
        {
            return View();
        }


После чего происходит валидация модели и проверка логина и пароля. Если все Ок, хочу вызвать метод index контроллера Home:
Код: 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.
        [HttpPost]
        [AllowAnonymous]
        public ActionResult Login(LoginModel model)
        {
            if (ModelState.IsValid)
            {
                   //Проверка логина и пароля на уровне БД
                   //..................
                   if (/*логин и пароль верны */)
                   {    
                         //return RedirectToAction("Index","Home");   -- так тоже не отрабатывает
                        return RedirectToRoute(new { controller = "Home", action = "Index" });
                    }
                    else
                    {
                        ModelState.AddModelError("", "Не правильные имя или пароль");
                        return View(model);
                    }

                

            }
            else
            {
                ModelState.AddModelError("", "Имя или пароль введены некорректно");
                return View(model);
            }

        }


При этом метод Index контроллера Home не вызывается, т.е. остается страница ввода пароля и ничего далее не происходит. В отладчике так же не переходит на отработку метода Index.
Подскажите, плз, в чем грабли. Заранее благодарен
...
Рейтинг: 0 / 0
23.12.2015, 14:24
    #39136040
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Bobby,
Грабли в том, что просто проверить логин и пароль недостаточно, надо создавать и аутентификационную куки, которую поймет AuthorizeAttribute как валидную и пропустит в Home/Index.
...
Рейтинг: 0 / 0
23.12.2015, 14:27
    #39136048
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Т.е. по сути:
1) Необходимо убедиться, что в web.config прописан корректный механизм аутентификации:
Код: xml
1.
<authentication mode="Forms"></authentication>


2) Код дополнить примерно следующим образом:
Код: 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.
        [HttpPost]
        [AllowAnonymous]
        public ActionResult Login(LoginModel model)
        {
            if (ModelState.IsValid)
            {
                   //Проверка логина и пароля на уровне БД
                   //..................
                   if (/*логин и пароль верны */)
                   {
                        FormsAuthentication.SetAuthCookie(model.Username, model.RememberMe);
                        return RedirectToAction("Index","Home");
                    }
                    else
                    {
                        ModelState.AddModelError("", "Не правильные имя или пароль");
                        return View(model);
                    }

                

            }
            else
            {
                ModelState.AddModelError("", "Имя или пароль введены некорректно");
                return View(model);
            }

        }
...
Рейтинг: 0 / 0
23.12.2015, 14:33
    #39136056
Bobby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Axeleron,
в web.config:
Код: xml
1.
2.
3.
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>


Сейчас с куками попробую
...
Рейтинг: 0 / 0
23.12.2015, 14:41
    #39136068
Bobby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Axeleron,
Спасибо большое!!!
все заработало!!!
...
Рейтинг: 0 / 0
23.12.2015, 15:34
    #39136139
Bobby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Axeleron,
еще вопрос.
Установил:
Код: c#
1.
2.
      FormsAuthentication.SetAuthCookie(model.UserName, false);
      FormsAuthentication.SetAuthCookie(model.Password, false);


т.е. хочу, чтоб куки вообще не сохранялись для данного приложения. Но при следующем запуске попадаю сразу на главную страницу в обход авторизации, т.к. куки все таки сохранились. Как можно вообще отключить их создание?
Заранее спасибо
...
Рейтинг: 0 / 0
23.12.2015, 16:13
    #39136214
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Bobbyеще вопрос.
Установил:
Код: c#
1.
2.
      FormsAuthentication.SetAuthCookie(model.UserName, false);
      FormsAuthentication.SetAuthCookie(model.Password, false);


Пароли в куки не должны храниться. Тем более незашифрованные. Так что выделенная строка не нужна. Уберите.

Bobbyт.е. хочу, чтоб куки вообще не сохранялись для данного приложения. Но при следующем запуске попадаю сразу на главную страницу в обход авторизации, т.к. куки все таки сохранились. Как можно вообще отключить их создание?
Оключить куки можно, но не очень хорошая идея без явной на то надобности. Называется Cookieless authentication, и тогда вместо куки сессия будет постоянно присоединяться в виде querystring в URL. Чем вызвано нежелание использовать куки?

BobbyНо при следующем запуске попадаю сразу на главную страницу в обход авторизации, т.к. куки все таки сохранились.
Это потому что куки бывают двух видов: session и persistent. У Вас, видимо, в данном случае создаются persistent, что определяется как раз методом SetAuthCookie. Почитайте про оба вида куки для лушчего понимания. Если занялись веб-разработкой, то без куки никак не обойтись.
...
Рейтинг: 0 / 0
23.12.2015, 16:29
    #39136241
Bobby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Axeleron,
спасибо за советы.
сделал следующее:
<forms loginUrl="~/Account/Login" cookieless="UseUri" timeout="2880" />

cookieless="UseUri" -- логин сохраняется в куках, но при этом попадаю при запуске на строницу авторизации
...
Рейтинг: 0 / 0
23.12.2015, 16:32
    #39136245
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Bobby,
Так чем вызвана нелюбовь к куки так и не объяснили. По поводу cookieless не посоветую, так как за 11 лет разрабатывая вебапликации ни разу не приходилось его использовать.
...
Рейтинг: 0 / 0
23.12.2015, 18:17
    #39136395
Bobby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Axeleron,
Ту дело не в любви :). А скорее всего в недостаточном знании мат. части (только начинаю в вэб погружаться, а так больше все по базам). Необходимо, чтоб при каждом запуске приложения обязательно проходилась процедура авторизации. вот и ищу наилучшие варианты
...
Рейтинг: 0 / 0
23.12.2015, 18:28
    #39136404
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
BobbyAxeleron,
Ту дело не в любви :). А скорее всего в недостаточном знании мат. части (только начинаю в вэб погружаться, а так больше все по базам). Необходимо, чтоб при каждом запуске приложения обязательно проходилась процедура авторизации. вот и ищу наилучшие варианты
Используйте Session cookie - тогда при каждом закрытии и открытии нового окна браузера пользователю придется проходить процедуру аутентификации.
...
Рейтинг: 0 / 0
23.12.2015, 20:32
    #39136540
Bobby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не работает вызов метода другого контроллера MVC
Axeleron,
а для особо одаренных можно кусочек кода в студию )))
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / не работает вызов метода другого контроллера MVC / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]