2

フォーム認証をMVCサイトに追加しようとしていますが、アプリケーションを実行すると、ログインページにリダイレクトされます(これは正しいです)。ただし、ログインしようとするたびに、ページが更新されるだけで、コントローラーがPOSTリクエストを取得することはありません。フォーム認証の何かがオフになっていて、すべてのリクエストがログインページにリダイレクトされていると思いますか?どんな助けでも大歓迎です!

以下は私のウェブ設定情報です:

<authentication mode="Forms">
      <forms loginUrl="~/Account" timeout="30" slidingExpiration="false" requireSSL="false" />      
    </authentication>
<authorization>
      <deny users ="?" />
      <allow users = "*" />
    </authorization>

以下は私のログインページです:

@using (Html.BeginForm("Login", "Account", FormMethod.Post))
{
    @Html.LabelFor(x => x.Username)<br />
    @Html.TextBoxFor(x => x.Username)

    <br />
    <br />

    @Html.LabelFor(x => x.Password)<br />
    @Html.TextBoxFor(x => x.Password)


    <br />
    <br />
    <br />

    <input type="submit" value="Login" />
}

以下は私のコントローラーです:

[HttpGet]
        public ActionResult Index()
        {
            return View("~/Views/Account/Login.cshtml", new LoginViewModel());
        }

        [HttpPost]
        public ActionResult Login(LoginViewModel viewModel)
        {
            Membership.ValidateUser(viewModel.Username, viewModel.Password);
            FormsAuthentication.SetAuthCookie(viewModel.Username, viewModel.RememberMe);

            return View("~/Views/Account/Login.cshtml", viewModel);
        }
4

3 に答える 3

2

が発生していると思いますが、私POSTの友人が抱えている問題は、の最後にあるログインページにリダイレクトしていることですPOST

return View("~/Views/Account/Login.cshtml", viewModel);

ユーザーをホームページに誘導します。

于 2012-09-27T12:55:19.713 に答える
2

Login HttpPostアクションからホームページにリダイレクトすることを提案している人もいますが、Visual Studioによって作成された標準のMVC「イントラネットアプリケーション」テンプレートは、FormsAuthenticationインフラストラクチャによってクエリ文字列としてLoginアクションに渡されるreturnUrlにリダイレクトしようとします。

if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
    return Redirect(returnUrl);
}
else
{
    return RedirectToAction("Index", "Home");
}

あなたがそうしない正当な理由がない限り、私はこれをコピーします。

于 2012-09-27T13:03:52.377 に答える
1

あたりです。そのコードのために:

public ActionResult Index()
{
   return View("~/Views/Account/Login.cshtml", new LoginViewModel());
}

に変更return View(); し、適切なフォルダにIndexという名前のビューを作成します。

于 2012-09-27T12:54:27.407 に答える