您好,
这可能听起来像一个非常愚蠢的问题,我不知道这里有什么可能,因为网上的所有“自定义属性”教程几乎都是相同的,并且它们没有解决我想要做的事情。 我已经看到了一些代码在代码中写入属性类的代码,例如:Logging with ASP.NET MVC Action Filters,我想知道这个代码是如何执行的。
如果我有以下代码:
public class Test
{
[RestrictedAttribute("RegisteredMember")]
public void DoSomething()
{
//this code can only be executed if the logged-in user
//is a member of the RegisteredMember group
}
}
然后自定义Attribute RestrictedAttribute将是这样的:
[AttributeUsage(AttributeTargets.Method)]
public class RestrictedAttribute : System.Attribute
{
/// <summary>
/// Make this code restricted to users with a required role
/// </summary>
/// <param name="requiredRole">The role required to execute this method</param>
public RestrictedAttribute(string requiredRole)
{
//validate if member is in role, else throw exception
throw new MemberNotInRoleException(requiredRole);
}
public new string ToString() {
return "Access needs to be granted";
}
}
现在的问题是,当我执行Test.DoSomething()方法时,我无法抛出MemberNotInRoleException。
也许我只是错过了自定义属性的整个概念,随时解释。
答案 0 :(得分:3)
您首先看待属性的方式听起来很正确,但请再想一想。你真正在做的是装饰你的班级或其他任何东西,以便与它一起工作的东西可以做出决定,而不是让班级本身做出决定。通过在MVC中使用actionfilter属性的方式让我蒙上了阴影,看起来他们做了些什么,但它是选择事件并相应地使用属性的框架。我通常会尝试将属性视为我的程序的注释。