有一個類似的要求,我必須將值傳遞給自定義屬性。
這裏的問題是,屬性裝飾不允許變量。 你得到編譯時錯誤:
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