从基本控制器重定向到操作方法
Posted
技术标签:
【中文标题】从基本控制器重定向到操作方法【英文标题】:redirect to action method from base controller 【发布时间】:2013-06-20 23:35:04 【问题描述】:我在我的基本控制器类中初始化了方法,每当执行任何操作方法时都会调用该方法。在每个操作方法上,我想检查我的会话,如果它为空,它应该重定向到登录页面。
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");
它正在调用此方法,但不重定向到管理员登录方法,并继续执行并调用正在进行的方法,因此会出现错误。
简而言之,我想检查我的应用程序会话何时为空,它应该重定向到登录页面,并且不方便检查所有方法。请建议我一些好方法。
【问题讨论】:
【参考方案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]
过滤器,它可能更适合您的需求。见here。
【讨论】:
感谢您的建议,但我无法使用 Url.Action。你能建议我需要为那个 Url.Action 引用哪个程序集吗? @Silvia,我猜是System.Web.Mvc
【参考方案2】:
更简单的方法:
public void RedirectToLogin()
RedirectToAction("AdminLogin", "Admin").ExecuteResult(this.ControllerContext);
【讨论】:
以上是关于从基本控制器重定向到操作方法的主要内容,如果未能解决你的问题,请参考以下文章