Аналогично этому сообщению: MVC 3 - FormsAuthentication - Не могу предоставить доступ к моему действию входа в систему
Я не могу получить свою форму для ввода имени пользователя / пароля впост-обработчик действия Logon.Тем не менее, мой AccountController наследуется от контроллера по умолчанию, то есть нет атрибута [Authorize]
.Мой контроллер аккаунта выглядит так:
[HttpGet]
public ActionResult LogOn()
{
return View();
}
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl = null)
{
...
}
И мой web.config содержит, среди прочего:
<location path="Account">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<authorization>
<deny users="?" />
</authorization>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" defaultUrl="~/Home/Index" />
</authentication>
После отправки формы входа в систему он сразу перенаправляет меня на [HttpGet]
версия LogOn-акции.Я никогда не обращаюсь к POST-версии.Я получаю такой же ответ, как упомянуто в посте выше:
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Account/LogOn?ReturnUrl=%2f">here</a>.</h2>
</body></html>
Если я закомментирую <authorization>
, все работает нормально.Однако в этом случае, когда я ввожу глубокую ссылку на страницу, требующую авторизации, я не перенаправляюсь на страницу входа.
Я также попытался добавить местоположение «Аккаунт» и разрешить всепользователи, но это, кажется, не имеет никакого эффекта.
Кто-нибудь может указать, что я делаю неправильно?
РЕДАКТИРОВАТЬ
В FiddlerЯ всегда вижу этот шаблон:
# Result Protocol Host URL Body Caching Content-Type Process Comments Custom
1 302 HTTP localhost:36372 / 145 private text/html; charset=utf-8 iexplore:6400
2 200 HTTP localhost:36372 /Account/LogOn?ReturnUrl=%2f 4,752 private text/html; charset=utf-8 iexplore:6400
Почему первый URL всегда /
?
EDIT2
Мне пришло в голову проверитьсгенерированный HTML, и, к моему удивлению, это выглядит так:
<form action="/" id="LogOnForm" method="post">
Очевидно, это не правильное действие.Код ASP выглядит следующим образом:
@using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { id = "LogOnForm" }))
А мои маршруты выглядят так:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Account", action = "LogOn", id = UrlParameter.Optional } // Parameter defaults
);