2

我在我的 asp.net mvc-4 Web 应用程序中使用自定义角色提供程序。

在我的“CustomRoleProvider”类中,我扩展了“RoleProvider”接口,并覆盖了类中的“IsUserInRole”、“GetRolesForUser”和“GetAllRoles”函数。这很好用。

现在,如果用户尝试访问用户无权访问的操作,我正在尝试重定向自定义页面(例如:“~/Security/AccessDenied/Index”)。如果用户默认尝试这样做,它会重定向到主页。为了重定向我的自定义页面,我扩展了“AuthorizeAttribute”接口并覆盖了“OnAuthorization”函数。但看起来从未调用过“OnAuthorization”函数。

这是我扩展“AuthorizeAttribute”接口的代码:

public class AccessDeniedAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        if (filterContext.Result is HttpUnauthorizedResult)
        {
            filterContext.Result = new RedirectResult("~/Security/AccessDenied/Index");
        }
    }
}

为什么没有调用“OnAuthorization”函数?需要帮忙...

4

1 回答 1

2

您需要将自定义属性应用于操作或控制器(或将其添加为所有请求的通用过滤器)。使用您的自定义属性而不是 Authorize 属性。

[AccessDeniedAuthorize(Roles="Admin")] 

应该管用。

于 2013-11-04T10:46:04.417 回答