有一个类似的要求,我必须将值传递给自定义属性。
这里的问题是 Attribute 装饰不允许variables。你得到编译时错误:
非静态字段、方法或属性需要对象引用
这是我能够做到的:
在控制器中
[FineGrainAuthorization]
public class SomeABCController : Controller
{
public int SomeId { get { return 1; } }
}
在属性
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class FineGrainAuthorizationAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
ControllerBase callingController = filterContext.Controller;
var someIdProperty = callingController.GetType().GetProperties().Where(t => t.Name.Equals("SomeId")).First();
int someId = (int) someIdProperty.GetValue(callingController, null);
}
}
记住里面的字符串.Name.Equals("SomeId")
必须大小写匹配声明public int SomeId