15

我在我的基本控制器类中初始化了方法,每当执行任何操作方法时都会调用该方法。在每个操作方法上,我想检查我的会话,如果它为空,它应该重定向到登录页面。

 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");
    }

它正在调用此方法,但未重定向到管理员登录方法,并继续执行并调用正在进行的方法,因此会出现错误。

简而言之,我想检查我的应用程序会话何时为空,它应该重定向到登录页面,并且不方便检查所有方法。请给我一些好方法。

4

2 回答 2

23

您正在调用RedirectToLogin()which 反过来只是返回RedirectToActionResult未使用且不影响操作流程的 a 。

试试这个:

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]过滤器,它可能更适合您的需求。见这里

于 2013-06-24T12:54:07.190 回答
2

更简单的方法:

public void RedirectToLogin()
{
    RedirectToAction("AdminLogin", "Admin").ExecuteResult(this.ControllerContext);
}
于 2019-11-14T21:06:32.297 回答