【发布时间】:2019-12-30 21:20:40
【问题描述】:
是否可以从自定义属性中获取类的值(比如说字符串属性)?
例如:
public class test
{
[EncodeHTML]
public string body { get; set; }
public int id { get; set; }
}
我希望自定义属性EncodeHTML能够获取“body”属性的设置值。
我知道这可以通过以下方式实现:
public string body
{
get;
set {
value = HttpUtility.HTMLEncode(this);
}
但想知道这是否可以被隔离以在许多类属性中重复使用。
这是自定义属性的一个简单示例:
[AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = false)]
sealed class EncodeHTMLAttribute : Attribute
{
public EncodeHTMLAttribute()
{
}
}
【问题讨论】:
-
不是真的,属性属于类型,而不是实例。要执行此类操作,您可能需要研究像 Fody 这样的面向方面编程 (AOP),或者自己进行 IL 编织(不推荐)。
-
@RonBeyer 很公平,我希望绕过 [AllowHtml] 或 [ValidateInput(false)] 属性来将模型绑定到控制器。
-
属性的构造函数在类的任何实例之前运行,因此获取属性的值是没有意义的。话虽如此,一个属性可以包含在运行时触发的处理程序(这就是ActionFilter attribute can access the instance of the controller),但您必须设置一些代码来查找属性并在创建每个实例时调用处理程序。
标签: c# properties