web-dev-qa-db-ja.com

ベースコントローラーからアクションメソッドにリダイレクトする

アクションメソッドが実行されるたびに呼び出されるベースコントローラークラスのメソッドを初期化しました。すべてのアクションメソッドで、セッションを確認したいのですが、セッションがnullの場合は、ログインページにリダイレクトする必要があります。

 public class BaseController : Controller
{
    protected IDataRepository _appData = new DataRepository();

    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);

        if (SessionFactory.CurrentAdminUser == null)
        {
            RedirectToLogin();
        }
    }
 }
public ActionResult RedirectToLogin()
    {
        return RedirectToAction("AdminLogin", "Admin");
    }

このメソッドを呼び出していますが、adminログインメソッドにリダイレクトせず、実行を継続し、フロー中のメソッドを呼び出すため、エラーが発生します。

要するに、アプリケーションセッションがnullになるたびにチェックしたいのですが、ログインページに再変換する必要があり、すべてのメソッドをチェックするのは便利ではありません。いくつかの良い方法を提案してください。

13
DharaPPatel

RedirectToLoginを呼び出しています。これは、誰も使用していないRedirectToActionResultを返すだけであり、プロセスのフローには影響しません。

代わりにこれを試してください:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting();

    if (SessionFactory.CurrentAdminUser == null)
        filterContext.Result = new RedirectResult(Url.Action("AdminLogin", "Admin"));
}

または、Initializeをオーバーライドすることを主張する場合:

protected override void Initialize(RequestContext requestContext)
{
    base.Initialize(requestContext);

    if (SessionFactory.CurrentAdminUser == null)
    {
        requestContext.HttpContext.Response.Clear();
        requestContext.HttpContext.Response.Redirect(Url.Action("AdminLogin", "Admin"));
        requestContext.HttpContext.Response.End();
    }
}

また、[Authorize]フィルターを確認してください。ニーズに適している場合があります。 ここ を参照してください。

19
haim770

より簡単なアプローチ:

public void RedirectToLogin()
{
    RedirectToAction("AdminLogin", "Admin").ExecuteResult(this.ControllerContext);
}
1
Alexander