0

デコレータなしとデコレータ付きControllerの2つのアクションがあります。LogonLogOn[HttpPost]

コード:

        public ActionResult LogOn()
        {
            return View();
        }

        [HttpPost]
        public ActionResult LogOn(string username, string password, 
            bool? rememberMe, string returnUrl)
        {
            AccountService client = new AccountService();

            if (client.IsUserAllowedIn(username, password))
                FormsAuthentication.SetAuthCookie(username, rememberMe ?? false);

            return Redirect(returnUrl);
        }

私が直面している問題は、デコレータを使用してメソッドにアクセスしようとしても、[Authorize]デコレータを使用したアクションにASP.NET MVCリダイレクトされないことです。LogOn[HttpPost]

LogOnテストの目的で、 usingというフォームを作成しましたが、Post機能しました。したがって、問題はデコレータの使用方法にあると思います。

私のweb.config

    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>

私が間違っていることについて何か考えはありますか?

4

1 に答える 1

1

私が直面している問題は、[Authorize]デコレータを使用してメソッドにアクセスしようとすると、ASP.NETMVCが[HttpPost]デコレータを使用してLogOnアクションにリダイレクトされないことです。

もちろん、そうではありません。非常に基本的な定義では、リダイレクトはGETリクエストを意味します。POST動詞でのみアクセス可能なコントローラーアクションにリダイレクトできるとは期待できません。それ無理。

それに加えて、保護されたリソースが、資格情報を検証することになっているコントローラーアクションにリダイレクトする必要があるのはなぜですか。人々が通常期待することは、誰かが保護されたリソースにアクセスしようとすると、ユーザーが自分の資格情報を入力できるログオンフォームをレンダリングするコントローラーアクションにリダイレクトされ、検証のためにこのフォームを対応するPOSTアクションに送信し、自分の資格情報が有効なPOSTアクションは、フォーム認証Cookieを発行し、最初に要求していた保護されたリソースを指しているリターンURLにリダイレクトします。

于 2013-01-29T13:10:41.127 に答える