アクションメソッドが実行されるたびに呼び出されるベースコントローラークラスのメソッドを初期化しました。すべてのアクションメソッドで、セッションを確認したいのですが、セッションが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になるたびにチェックしたいのですが、ログインページに再変換する必要があり、すべてのメソッドをチェックするのは便利ではありません。いくつかの良い方法を提案してください。
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]
フィルターを確認してください。ニーズに適している場合があります。 ここ を参照してください。
より簡単なアプローチ:
public void RedirectToLogin()
{
RedirectToAction("AdminLogin", "Admin").ExecuteResult(this.ControllerContext);
}