C# 拒绝访问页面未被重定向

C# 拒绝访问页面未被重定向,c#,asp.net-mvc-4,entity-framework-5,roleprovider,C#,Asp.net Mvc 4,Entity Framework 5,Roleprovider,我正在asp.net mvc-4 web应用程序中使用自定义角色提供程序 在我的“CustomRoleProvider”类中,我扩展了“RoleProvider”接口,并重写了类中的“IsUserInRole”、“GetRolesForUser”和“GetAllRoles”函数。那很好 现在,如果用户试图访问一个用户无权访问的操作,我将尝试重定向一个自定义页面(如:“~/Security/AccessDenied/Index”)。如果用户在默认情况下尝试这样做,它将重定向到主页。为了重定向我的自

我正在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”函数?需要帮助

您需要将自定义属性应用于操作或控制器(或将其添加为所有请求的常规筛选器)。使用自定义属性而不是授权属性

[AccessDeniedAuthorize(Roles="Admin")] 

应该有效。

只是一个问题,因为文本中没有明确说明:您是否已将自定义属性应用于某个操作或控制器?您是否询问[Authorize]属性?如果这是你的问题,那么我的回答是肯定的。如果一个操作只能由“Admin”角色的用户访问,那么我将[Authorize(Roles=“Admin”)]放在操作的顶部。