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