首页 文章

如何从基本控制器中的OnActionExecuting重定向?

提问于
浏览
170

我尝试了两种方法:Response.Redirect(),它什么都不做,以及在基本控制器内调用一个返回ActionResult并让它返回RedirectToAction()的新方法......这些都不起作用 .

如何从OnActionExecuting方法进行重定向?

4 回答

  • 2
    public override void OnActionExecuting(ActionExecutingContext filterContext)
     {
        ...
        if (needToRedirect)
        {
           ...
           filterContext.Result = new RedirectResult(url);
           return;
        }
        ...
     }
    
  • 52

    它也可以这样做:

    filterContext.Result = new RedirectToRouteResult(
        new RouteValueDictionary
        {
            {"controller", "Home"},
            {"action", "Index"}
        }
    );
    
  • 32

    创建一个单独的类,

    public class RedirectingAction : ActionFilterAttribute
        {
          public override void OnActionExecuting(ActionExecutingContext context)
          {
            base.OnActionExecuting(context);
    
            if (CheckUrCondition)
            {
                context.Result = new RedirectToRouteResult(new RouteValueDictionary(new
                {
                    controller = "Home",
                    action = "Index"
                }));
            }
          }
       }
    

    然后,在创建控制器时,将此注释称为

    [RedirectingAction]
    public class TestController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
    
  • 332

    如果重定向的控制器从相同的 baseController 继承,我们覆盖 OnActionExecuting 方法导致递归循环 . 假设我们将其重定向到帐户控制器的登录操作,然后登录操作将调用 OnActionExecuting 方法并再次重定向到相同的登录操作...所以我们应该应用检查 OnActionExecuting 方法来检查请求来自同一天气控制器如果是,那么不要再次重定向它登录操作 . 这是代码:

    受保护的覆盖

    void OnActionExecuting(ActionExecutingContext filterContext)
    {
       try
       {
          some condition ...
       }
       catch
       {
          if (filterContext.Controller.GetType() !=     typeof(AccountController))
          {
             filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Account" }, { "action", "Login" } });
          }
       }
    }
    

相关问题