1. ホーム
  2. c#

[解決済み] リダイレクトフロムアクションフィルタ属性

2022-05-05 23:44:39

質問

においてリダイレクトを行う最良の方法は何でしょうか? ActionFilterAttribute . 私は ActionFilterAttribute という IsAuthenticatedAttributeFilter で、セッション変数の値をチェックするものでした。 もしこの変数がfalseなら、アプリケーションをログインページにリダイレクトさせたいのです。 私は、ルート名 SystemLogin しかし、この時点ではどのようなリダイレクト方法であっても構いません。

解決方法は?

filterContext.Resultを設定します。

ルート名で

filterContext.Result = new RedirectToRouteResult("SystemLogin", routeValues);

というようなこともできます。

filterContext.Result = new ViewResult
{
    ViewName = SharedViews.SessionLost,
    ViewData = filterContext.Controller.ViewData
};


を使用したい場合 RedirectToAction :

を作れば、公開される RedirectToAction メソッドをコントローラ( できればそのベースコントローラ を呼び出すだけです。 RedirectToAction から System.Web.Mvc.Controller . このメソッドを追加することで、パブリックコールで あなたの RedirectToAction をフィルタから削除します。

public new RedirectToRouteResult RedirectToAction(string action, string controller)
{
    return base.RedirectToAction(action, controller);
}

そうすると、フィルターは次のようになります。

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var controller = (SomeControllerBase) filterContext.Controller;
    filterContext.Result = controller.RedirectToAction("index", "home");
}