检查Web API中的AllowAnonymousAttribute
本文关键字:AllowAnonymousAttribute 中的 API Web 检查 | 更新日期: 2023-09-27 18:13:14
System.Web.Mvc.ActionDescriptor具有方法IsDefined,该方法有助于确定是否为此成员定义了指定属性类型的一个或多个实例。
System.Web.Http.Controllers.HttpActionDescriptor没有此方法。
如何使用HttpActionDescriptor检查AllowAnonymousAttribute?
我找到了。我可以使用GetCustomAttributes方法。例如(来自AuthorizeAttribute实现(:
private static bool SkipAuthorization(HttpActionContext actionContext)
{
if (!Enumerable.Any<AllowAnonymousAttribute>((IEnumerable<AllowAnonymousAttribute>) actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>()))
return Enumerable.Any<AllowAnonymousAttribute>((IEnumerable<AllowAnonymousAttribute>) actionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes<AllowAnonymousAttribute>());
else
return true;
}
@FireShock的答案是正确的,这里有一个我认为更容易阅读的版本:
private static bool ShouldSkipAuthorization(HttpActionContext actionContext)
{
return
actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>(true).Any() ||
actionContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<AllowAnonymousAttribute>(true).Any();
}