ASP.NET授权在哪里发生?

时间:2017-08-07 07:13:05

标签: c# asp.net-web-api

在我的ASP.NET Web API项目中,我创建了一个自定义类来覆盖Authorize属性的Roles属性。

public class AuthorizeRolesAttribute : AuthorizeAttribute
    {
        public AuthorizeRolesAttribute(params Roles[] roles) : base()
        {
            if (roles.Length == 1)
                Roles = ((int)roles[0]).ToString();
            else
            {
                for (int i = 0; i < roles.Length; i++)
                {
                    var role = ((int)roles[i]).ToString();

                    if (i == 0) // First role
                    {
                        Roles = role + ",";
                        continue;
                    }

                    if (i == (roles.Length - 1)) // Last role
                    {
                        Roles = Roles + role;
                        break;
                    }
                    Roles = Roles + "," + role;
                }
            }
        }

    }

public enum Roles : int
    {
        User1 = 1,
    }

现在假设我已经调用了API,但请求中没有&#34; User1&#34; role属性,我在哪里可以设置一个断点,以查看我从请求中获得的角色与附加到某个API的角色的实际检查和比较。我是否必须编写另一个固有的另类课程?

2 个答案:

答案 0 :(得分:0)

它会发生在AuthorizationFilter部分,您应该根据每个控制器/每个API端点/全局使用[Authorize]属性的属性。您应该在自定义授权代码块中放置一个断点。

因此,一旦您发出请求并进入授权,您的自定义属性代码块就会很好。同样,您必须将自定义属性注册到config管道。

答案 1 :(得分:0)

由于您使用的是网络API,因此需要System.Web.Http.AuthorizeAttribute。这是ApiControllers的authorize属性。与MVC Controller不同。

创建扩展它的客户属性,覆盖其OnAuthorize方法,您可以将任何授权逻辑放入其中,并使用它来装饰控制器操作。一旦操作被击中,OnAuthorize中设置的断点也将被击中。