从动作过滤器属性重定向?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

什么是做一个重定向的最佳方式ActionFilterAttribute。我有一个ActionFilterAttribute调用,IsAuthenticatedAttributeFilter并检查会话变量的值。如果该变量为false,我希望应用程序重定向到登录页面。我宁愿使用路由名称SystemLogin重定向,但是在这一点上任何重定向方法都可以。

提问于
用户回答回答于

设置filterContext.Result

路线名称:

filterContext.Result = new RedirectToRouteResult("SystemLogin", routeValues);

你也可以做一些事情:

filterContext.Result = new ViewResult
{
    ViewName = SharedViews.SessionLost,
    ViewData = filterContext.Controller.ViewData
};

如果你想使用RedirectToAction

你可以RedirectToAction在你的控制器上(最好在其基座控制器上)制作一个公共方法,该方法只需调用受保护RedirectToAction的方法System.Web.Mvc.Controller。添加此方法允许从过滤器公开调用RedirectToAction

public new RedirectToRouteResult RedirectToAction(string action, string controller)
{
    return base.RedirectToAction(action, controller);
}

然后你的过滤器看起来像这样:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var controller = (SomeControllerBase) filterContext.Controller;
    filterContext.Result = controller.RedirectToAction("index", "home");
}
用户回答回答于

或者重定向,如果它正在调用你自己的代码,你可以使用这个:

actionContext.Result = new RedirectToRouteResult(
    new RouteValueDictionary(new { controller = "Home", action = "Error" })
);

actionContext.Result.ExecuteResult(actionContext.Controller.ControllerContext);

扫码关注云+社区