我想为我的控制器方法添加属性,可以使用反射检查。
我可以通过编写一个过滤器看到如何做到这一点,如果这是实现我想要的唯一方法,我会写一个空过滤器,但我真正想要的是一个反射可见的属性,它可以用于生成文档。例如:
[OperatorFriendlyDescription("Begin a new message from a letter template and set initial properties.")]
public ActionResult Create(string editorName, int mastKey, ...)
有没有办法在不编写新过滤器的情况下获取我的OperatorFriendlyDescription属性?
(或者,是否有其他方法或文档功能允许我为各个控制器方法设置一个操作员友好名称并使用反射检索它?)
答案 0 :(得分:2)
是。可以使用允许放置在该类型的方法/类/属性等上的任何属性。该类必须继承自System.Attribute
或其他继承自该类的类。
VB示例,在C#中应该非常相似。由于属性target属性,这个只能放在方法上。不要在任何地方使用属性的AttributeUsage
属性。
<AttributeUsage(AttributeTargets.Method)>
Public Class OperatorFriendlyDescription
Inherits System.Attribute
Public Property Description As String
Public Sub New(description As String)
Me.Description = description
End Sub
End Class
答案 1 :(得分:2)
没有神奇的方法可以使用OperatorFriendlyDescription
属性而不定义它,但如果它不需要过滤器功能,则不要继承FilterAttribute
。
如果你看一下MVC FilterAttribute
的声明,你会发现它只是一个专门的System.Attribute
。
public abstract class FilterAttribute : Attribute, IMvcFilter
从MSDN documentation我们可以验证System.Attribute
是所有属性的基础。
由于您不需要特殊功能,因此请继承该功能。
C#中的示例属性
public class ArbitraryAttribute: Attribute
{
public string ArbitraryData { get; private set; }
public ArbitraryAttribute(string arbitraryData)
{
ArbitraryData = arbitraryData;
}
}