【问题标题】: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");
    }

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

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 model-view-controller asp.net-mvc-4


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多