Моя структура проекта MVC5 выглядит следующим образом:
Project
- App_Data
- App_Start
- RouteConfig.cs
- Controllers
- AccountController.cs
- HomeController.cs
- Views
- Account
- Index.cshtml
- Home
- Index.cshtml
- web.config
- Global.asax
- Web.config
В представлении -> Учетная запись -> Index.cshtml - это страница входа в систему, которая на данный момент имеет вид:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@using (Html.BeginForm("Login", "Account", FormMethod.Post))
{
<p>
from Account
</p>
<input type="submit" value="Post" />
}
</div>
</body>
</html>
Код AccountController:
public class AccountController : Controller
{
// GET: Account
public ActionResult Index()
{
return View();
}
[HttpPost]
[AllowAnonymous]
public ActionResult Login()
{
if (true) //assuming validation is true
{
FormsAuthentication.RedirectFromLoginPage("test", false);
}
return null;
}
}
Когда пользователь запрашивает эту страницу, вызывается метод Index (), а когда пользователь нажимает кнопку «Отправить», должен вызываться метод Login ().
Как ни странно, когда я нажимаю кнопку «Отправить», которая находится в форме POST, она достигает точки останова в контроллере в методе Index () вместо Login ().
При проверке кнопки тег формы имел:
<form action="/Account/Login" method="post">
Поэтому я скопировал URL-адрес и вставил в браузер (http://localhost:55136/Account/Login), Вместо Login () был вызван метод Index (). Однако, если я удаляю код формAauthentication из web.config и FormsAuthentication.RedirectFromLoginPage ("test") ", false); работает отлично.
Файл Web.config для проверки подлинности с помощью форм:
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Index" defaultUrl="~/Home/Index" >
<credentials passwordFormat="Clear"></credentials>
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<compilation debug="true" targetFramework="4.6.1"/>
<httpRuntime targetFramework="4.6.1"/>
</system.web>
Моя маршрутизация в файле RouteConfig.cs:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Я не понимаю поведение MVC сейчас. Это никогда не случалось раньше. Почему MVC ведет себя так? Как я могу перенаправить в Login () при нажатии кнопки Отправить?