Перенаправление на метод действия с базового контроллера

Я инициализировал метод в моем классе базового контроллера, который вызывается всякий раз, когда выполняется какой-либо метод действия. В каждом методе действия я хочу проверить свою сессию, и если она равна нулю, она должна перенаправляться на страницу входа.

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

он вызывает этот метод, но не перенаправляет его на метод входа в систему и продолжает выполнение метода on и call, который находится в потоке, поэтому придет ошибка.

Короче, я хочу проверять каждый раз, когда мой сеанс приложения получает значение null, его следует переустанавливать на страницу входа в систему, и его не удобно проверять на всех методах. Пожалуйста, предложите мне хороший способ.

Ответ 1

Вы вызываете 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], он может лучше соответствовать вашим потребностям. См. здесь.