猿问

从动作过滤器属性重定向

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

函数式编程
浏览 602回答 3
3回答

忽然笑

作为重定向的替代方法,如果它正在调用您自己的代码,则可以使用以下命令:actionContext.Result = new RedirectToRouteResult(    new RouteValueDictionary(new { controller = "Home", action = "Error" }));actionContext.Result.ExecuteResult(actionContext.Controller.ControllerContext);它不是纯粹的重定向,但会产生类似的结果而没有不必要的开销。

RISEBY

我正在使用MVC4,我使用以下方法在违反授权时重定向自定义html屏幕。扩展AuthorizeAttribute说CutomAuthorizer 覆盖OnAuthorization和HandleUnauthorizedRequest在CustomAuthorizer中注册RegisterGlobalFilters。public static void RegisterGlobalFilters(GlobalFilterCollection filters){    filters.Add(new CustomAuthorizer());}识别unAuthorized访问呼叫HandleUnauthorizedRequest并重定向到相关的控制器操作,如下所示。public class CustomAuthorizer : AuthorizeAttribute{    public override void OnAuthorization(AuthorizationContext filterContext)    {        bool isAuthorized = IsAuthorized(filterContext); // check authorization        base.OnAuthorization(filterContext);        if (!isAuthorized && !filterContext.ActionDescriptor.ActionName.Equals("Unauthorized", StringComparison.InvariantCultureIgnoreCase)            && !filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.Equals("LogOn", StringComparison.InvariantCultureIgnoreCase))        {            HandleUnauthorizedRequest(filterContext);        }    }    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)    {        filterContext.Result =       new RedirectToRouteResult(           new RouteValueDictionary{{ "controller", "LogOn" },                                          { "action", "Unauthorized" }                                         });    }}
随时随地看视频慕课网APP
我要回答