C# 具有枚举角色参数的自定义AuthorizeAttribute在ajax调用中获取空值

C# 具有枚举角色参数的自定义AuthorizeAttribute在ajax调用中获取空值,c#,ajax,api,asp.net-mvc-4,authorize-attribute,C#,Ajax,Api,Asp.net Mvc 4,Authorize Attribute,我的自定义属性有问题 public class ExplicitAuthorizeAttribute : AuthorizeAttribute { private readonly MembershipUserRole[] _acceptedRoles; public ExplicitAuthorizeAttribute() { } public ExplicitAuthorizeAttribute(params MembershipUserRole

我的自定义属性有问题

public class ExplicitAuthorizeAttribute : AuthorizeAttribute
{
    private readonly MembershipUserRole[] _acceptedRoles;

    public ExplicitAuthorizeAttribute()
    {

    }

    public ExplicitAuthorizeAttribute(params MembershipUserRole[] acceptedRoles)
    {
        _acceptedRoles = acceptedRoles;
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {  
       //Validation ...          
    }
}
我是这样使用它的:

[ExplicitAuthorize[(MembershipUserRole.Admin, MembershipUserRole.SuperAdmin)]
HttpGet和HttpPost可以很好地验证我的控制器和方法

但当我在ApiController中使用它并进行ajax调用时,AuthorizeCore没有运行,我遇到了安全漏洞/

我的枚举看起来像这样

[Flags]
public enum MembershipUserRole
{
    Admin= 1,
    SuperAdmin = 2
}
有人知道为什么我的AuthorizeCore没有在此上下文中进行验证吗?

顺便说一下,如果我用

[Authorized(Roles ="Admin, SuperAdmin")]

它的验证非常完美,但我希望只有strony类型的角色,这就是我使用enum的原因。

您从错误的类派生:而对于Web API控制器,您应该从中派生

不要忘记ASP.NET MVC和ASP.NET Web API是两个完全不同的框架,即使它们共享一些共同的原则和名称,相应的类也位于两个完全不同的名称空间中

因此,您所做的是用一个它不知道的authorized属性装饰ASP.NET Web API操作

如果要在ASP.NET Web API中进行授权,请确保派生自正确的属性:

public class ExplicitAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
    private readonly MembershipUserRole[] _acceptedRoles;

    public ExplicitAuthorizeAttribute()
    {

    }

    public ExplicitAuthorizeAttribute(params MembershipUserRole[] acceptedRoles)
    {
        _acceptedRoles = acceptedRoles;
    }

    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        //Validation ...          
    }
}

你是如何传递用户角色的?嗯,我使用它就像在我的控制器上使用自定义属性一样,就像我使用AuthorizeAttribute[Authorize(roles=“Admin,SuperAdmin”)]一样,它进行验证,但我想这样使用[ExplicitAuthorize[(MembershipUserRole.Admin,MembershipUserRole.SuperAdmin]