【问题标题】:Use RedirectToRouteResult with Area failed使用带区域失败的 RedirectToRouteResult
【发布时间】:2015-09-05 02:00:03
【问题描述】:

我正在使用自定义过滤器来检查用户对特定操作的访问权限,并且我有一个名为 Admin 的区域。当过滤器重定向未经授权的用户时,它被重定向到内部区域而不是路由目录中的视图。
例如,当我访问http://localhost/admin/roles 时,我希望未经授权的用户将被重定向到http://localhost/authorized,而不是像现在这样重定向到http://localhost/admin/authorized
这是我使用过滤器的方法:

   public override void OnAuthorization(AuthorizationContext filterContext)
        {
            DigitalHubOnlineStoreEntities db = new DigitalHubOnlineStoreEntities();
            RbacUser requestingUser = new RbacUser();
            var controllerid = RbacUser.GetControllerId(filterContext.ActionDescriptor.ControllerDescriptor.ControllerName);
            var actionid = RbacUser.GetActionId(filterContext.ActionDescriptor.ActionName, controllerid);          
            if (!requestingUser.GetUserPermission(HttpContext.Current.User.Identity.Name, actionid, controllerid))
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "action", "Index" }, { "controller", "Unauthorized" } });
            }
        }

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-areas asp.net-mvc-filters


    【解决方案1】:

    您需要使用空字符串指定Area

    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                           {
                               { "action", "Index" },
                               { "controller", "Unauthorized" },
                               { "Area", String.Empty }
                           });
    

    【讨论】:

    • 非常感谢。其实我想是这样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2013-10-28
    相关资源
    最近更新 更多