アクションフィルター属性からのリダイレクト 質問する

アクションフィルター属性からのリダイレクト 質問する

でリダイレクトを実行する最も良い方法は何ですかActionFilterAttribute。 が呼び出されActionFilterAttributeIsAuthenticatedAttributeFilterセッション変数の値をチェックします。変数が false の場合、アプリケーションをログイン ページにリダイレクトします。ルート名を使用してリダイレクトしたいのですSystemLoginが、この時点ではどのリダイレクト方法でも問題ありません。

ベストアンサー1

filterContext.Result を設定する

ルート名:

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

次のようなこともできます:

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

使用したい場合RedirectToAction

RedirectToActionコントローラーにパブリックメソッドを作成することもできます(できればベースコントローラに) は、単に protected を呼び出しますRedirectToActionSystem.Web.Mvc.Controllerこのメソッドを追加すると、 public 呼び出しが可能になります。あなたの 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");
}

おすすめ記事