0

AuthorizeAttributeログインページにメッセージを表示するカスタムを作成しました。これがコードです。

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    public string Message { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        bool authorized = base.AuthorizeCore(httpContext);
        if (!authorized)
        {
            httpContext.Items["LoginFailMessage"] = Message;
        }

        return authorized;
    }
}

私の行動で私はします

[MyAuthorize(Message = "Please login to continue")]
public ActionResult Detail() 

HttpContext.Current.Items["LoginFailMessage"]現在、ビュー内のアイテムにアクセスできません。問題は、アイテムが 1 回のリダイレクト呼び出しに対してのみ存在するのに、認証の失敗が複数回のリダイレクトを引き起こしていることです。

それで、私が問題を解決できる方法はありますか?正確にはどこからメッセージを渡す必要がありますか?

編集

私がしようとしているのは、匿名ユーザーが何かの簡単な説明を見ることを許可されているとします。

説明とともに、editdetailリンクがあります。と の両方editdetail、ユーザーはログインする必要があります。そのため、どちらかをクリックすると、ユーザーはログイン ページにリダイレクトされます。

ユーザーがクリックするeditとメッセージが表示され、Please login to editクリックdetailするとplease login to see detailログインページに表示される場合があります。

4

1 に答える 1

0

これを行うには、ModelState を使用する方がはるかに簡単です。たとえば、次のようになります。

[HttpPost]
public ActionResult Login(LoginViewModel model) {
    // .. check model state is valid
    if (AuthorizationService.Authorize(model.Username, model.Password)) {
        // .. user is authenticated
    }
    else {
        ModelState.AddModelError("", "Login failed.");
        return View(model);
    }
}

次に、ValidationSummary() を使用してログイン ページにエラーを表示するか、AddModelError 呼び出しでユーザー名またはパスワード モデル プロパティの名前を渡して ValidationMessage() を使用します。

于 2012-07-25T04:34:59.167 に答える