一尘不染

从动作过滤器属性重定向

c#

在中执行重定向的最佳方法是什么ActionFilterAttribute?我有一个ActionFilterAttribute电话,IsAuthenticatedAttributeFilter并检查了会话变量的值。如果变量为false,则我希望应用程序重定向到登录页面。我更愿意使用路由名称进行重定向,SystemLogin但是此时任何重定向方法都可以。


阅读 188

收藏
2020-05-19

共1个答案

一尘不染

设置filterContext.Result

带有路线名称:

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

您还可以执行以下操作:

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

如果要使用RedirectToAction

你可以做一个公共RedirectToAction方法控制器上( 最好是在它的基本控制器
),简单地调用保护RedirectToActionSystem.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");
}
2020-05-19