我一直在使用基于授权属性的 MvcSiteMapProvider,直到我们引入了一个从AuthorizeAttribute
. 主要区别在于它的构造函数签名:
public MyAuthorizeAttribute(param RoleCode[] roles) {
Roles = string.join(",", roles.Select(r => r.ToString());
}
并且... MvcSiteMapProvider 显示了意外的结果:只有标记为的操作MyAuthorizeAttribute
变得不可见。我已经通过禁用此构造函数来检查这一点——在向构造函数添加参数之前,一切都照常进行。此外 - 它不是params
特定的 - 任何参数(事件 int)都会导致这种行为。
正如我从 MvcSiteMapProvider 来源中了解到的那样,它会发出一些代码来模拟授权属性 - 但看起来不可能保存由外部代码生成的程序集。我知道有一种解决方法 - 使用某种可枚举的属性,但是你有什么建议可以让它与构造函数参数一起工作吗?你知道为什么 MvcSiteMapProvider 会这样吗?