2

プロパティAuthorizeAttributeを含むカスタムを作成したい。Message問題は、FormsAuthentication が指定された loginUrl にリダイレクトされることです。そのビューはどのようにして属性の Message プロパティにアクセスできますか?

たとえば、カスタム AuthorizeAttribute を使用してこのアクションを実行します

[Authorize(Message="You must be logged in to see user settings.")]
public ActionResult Settings()
{
    return View();
}

ユーザーがログインしていない場合、 /Account/LogOn (web.config の設定のおかげでFormsAuthentication) にリダイレクトされます。ユーザーが認識できるように、ログオン ビューに「ユーザー設定を表示するにはログインする必要があります」を表示したいログオン ページにリダイレクトされた理由

4

2 に答える 2

5

1 つのオプションは、カスタム AuthorizeAttribute の HandleUnautherizeRequest メソッドで Message プロパティの値を TempData に入れることです。次に、Account コントローラーの LogOn アクションで、TempData から値を取得し、それを ViewBag またはモデルに配置して、View がアクセスできるようにします。

Authorize属性:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{            
    base.HandleUnauthorizedRequest(filterContext);
    filterContext.Controller.TempData["MessageFromMyAttribute"] = this.Message;
}

アカウントコントローラー

public ActionResult LogOn()
{
    ViewBag.AttributeMessage = TempData["MessageFromMyAttribute"];
    return View();
}

MVC はバックグラウンドでリダイレクトを行っているため、TempData の値はリダイレクト後も保持されます。

于 2011-05-29T00:28:41.210 に答える
2

以下をせよ:

  1. から継承する独自の属性を作成します。AuthorizeAttribute
  2. フィルターで、メッセージを追加しますTempData
  3. ログインが必要なときにリダイレクトするアクションで、メッセージを取得TempDataしてビューに渡します。
于 2011-05-29T00:26:54.610 に答える