При использовании аутентификации по формам в MVC5 нажатие кнопки запускается другим методом действия - PullRequest
1 голос
/ 14 марта 2019

Моя структура проекта 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 () при нажатии кнопки Отправить?

1 Ответ

0 голосов
/ 15 марта 2019

Ваш Web.config должен иметь тег, показанный ниже:

<system.web>...</system.web>
<system.webServer>
    <modules>
      <remove name="FormsAuthenticationModule" />
    </modules>
</system.webServer>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...