Форма MVC 5 не отправляет метод [AllowAnonymous]

1

Я пытаюсь создать форму входа для моего проекта MVC 5. У меня уже работает аутентификация, поэтому мой контроллер украшен [Authorize]. Когда я запускаю свой проект, я справедливо направляю свое анонимное действие для входа:

[HttpGet]
[AllowAnonymous]
public ActionResult Login()
{
    return View();
}

В этом представлении я установил форму POST. Сгенерированный HTML выглядит отлично.

Затем я добавляю новый метод, который должен принять форму отправки:

[HttpPost]
[AllowAnonymous]
public ActionResult Login(FormCollection formCollection)
{
    ...

Я обнаружил, что когда я отправляю форму, мой первый метод Login вызывается - видимо, перенаправление, вызванное некоторыми проблемами проверки подлинности. (Трассировка Fiddler показывает, что моя форма, в то время как POST, отправляется в /Login? Key = myKeyHere вместо того, чтобы быть POSTed в /Login с ключом = myKeyHere как записью формы. Кроме того, если я изменю URL-адрес перенаправления моей аутентификации из //SomethingElse, представление формы меня перенаправляет на /SomethingElse вместо отправки его в /Login.)

Если я удалю [Authorize] с моего контроллера, моя подача формы проходит через отлично.

Это не похоже на то, что мои два метода имеют одно и то же имя (Login), так как я могу переименовать метод, который принимает POST, изменить действие моей формы и отправить на него, и я перенаправлен на мой логин GET снова.

Что мне нужно сделать, чтобы отправить форму методу [AllowAnonymous]?

Обновление для включения моего представления " Мой взгляд" уже использует действие POST:

@using (Html.BeginForm("Login", "Home", FormMethod.Post))
{
    @Html.TextBox("key", string.Empty, new { @class = "input_centered", id = "key_text"})
    <input type="submit" id="key_submit" class="enter" name="submit" value="Enter" />
}

Сгенерированный HTML выглядит хорошо:

<form action="/Login" method="post">
<input class="input_centered" id="key_text" name="key" type="text" value="" />
<input type="submit" id="key_enter" class="enter" name="submit" value="Enter" />
  • 0
    Если вы создаете новое приложение MVC, шаблон создает действие Login POST, которое вы пытаетесь выполнить. Может быть, просмотр этого поможет вам. Можете ли вы показать отправленную форму?
Теги:
authentication
asp.net-mvc

2 ответа

0

Проблема в том, что вы используете объект FormCollection, он слишком широк, и MVC-движок не может создавать или сопоставлять (де-сериализовать) ваши опубликованные данные с объектом FormCollection, поэтому не может найти никакого подходящего действия для сообщения. Попробуйте преобразовать свой FormCollection в сериализуемый объект.

например.

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel model)
  • 0
    Мой код работает нормально, когда я [Authorize] атрибут [Authorize] . Почему это проблема сложности?
  • 0
    У меня была похожая проблема, поэтому я и предложил.
0

Форма входа в систему - это просто сбор данных, чтобы разрешить вам авторизацию. Когда вы отправляете форму, она переходит к методу POST (с атрибутом [Authorize]), видит, что вы еще не авторизованы (на этом этапе не был вызван какой-либо метод для авторизации) и сразу перенаправляет вас на страницу входа в систему, создавая бесконечный цикл.

Для вашего метода POST требуется [AllowAnonymous] а затем в этом методе вы выполняете логику авторизации. С этого момента вы авторизуетесь и можете получить доступ к другим методам действий, отмеченным с помощью [Authorize].

  • 0
    Мой второй метод ( public ActionResult Login(FormCollection formCollection) ) установлены как [AllowAnonymous] . Возможно это не регистрируется как-то?
  • 0
    Я просто скопировал ваш код в новый проект, и он отлично работает (использует метод POST).
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню