有一个类似的要求,我必须将值传递给自定义属性。
这里的问题是,属性装饰不允许变量。 你得到编译时错误:
An object reference is required for the non-static field, method, or property
这是我如何能做到这一点:
在控制器
[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
种类,但我只能通过这种方式传递常量,正确吗?我想传入原始值以与正在验证的值进行比较。 – 2013-02-14 16:11:43
是的,只有常数。我不确定我是否会收到您的问题。验证器只能验证一个属性的当前值,它不知道任何属性的过去值。 – Oliver 2013-02-14 16:19:33
这就是我想要做的。 – 2013-02-14 16:50:36