我有一个ActionFilter,它应用于我的基本控制器,它检查请求和会话中的某些内容,并确保允许您查看请求的URI。
直到现在我们需要禁止所有页面(如今存在)但在这里和那里允许一些URI时,这一点工作正常。
理想情况下,我会将属性应用于我们想要允许的属性,然后在过滤器中检查该属性并允许它是否存在,但我无法弄清楚如何在过滤器中实现这一点。
有任何想法或建议吗?
答案 0 :(得分:0)
我花了一个多小时试图解决这个问题然后我在这里发布了SO。几分钟后,它袭击了我。
首先,我创建了一个属性
public class AlwaysAllowAnonymousAttribute : Attribute {}
其次,我用上面的属性
标记了我的动作或控制器最后,在我的ActionFilter中,我做了这个
public class VerifyResourceAccess : ActionFilterAttribute, IActionFilter
{
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
var actionAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(AlwaysAllowAnonymousAttribute), false);
var controllerAttributes = filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(AlwaysAllowAnonymousAttribute), false);
bool alwaysAllow = (actionAttributes.Length > 0) || (controllerAttributes.Length > 0);
if (!alwaysAllow) {
/* ... Some logic for checking if this user is allowed to access this resource ... */
}
base.OnActionExecuting(filterContext);
}
}
任何标有该属性的动作或控制器都将始终具有访问权限。