在我的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的角色的实际检查和比较。我是否必须编写另一个固有的另类课程?
答案 0 :(得分:0)
它会发生在AuthorizationFilter
部分,您应该根据每个控制器/每个API端点/全局使用[Authorize]
属性的属性。您应该在自定义授权代码块中放置一个断点。
因此,一旦您发出请求并进入授权,您的自定义属性代码块就会很好。同样,您必须将自定义属性注册到config
管道。
答案 1 :(得分:0)
由于您使用的是网络API,因此需要System.Web.Http.AuthorizeAttribute
。这是ApiControllers的authorize属性。与MVC Controller不同。
创建扩展它的客户属性,覆盖其OnAuthorize
方法,您可以将任何授权逻辑放入其中,并使用它来装饰控制器操作。一旦操作被击中,OnAuthorize
中设置的断点也将被击中。