在控制器帖子上读取自定义属性参数

时间:2017-07-13 08:23:54

标签: c# asp.net-core-mvc custom-attributes

我想编写一个自定义属性,我可以装饰一个ViewModel属性,当发布ViewModel时,我可以检查哪些已发布的属性具有此属性并运行一些逻辑。 我试图设置条件,这不应该以任何方式影响验证。

[SetsCondition(SomeEnumerationValue)]
public Fund SelectedFund {get;set;}
...
other properties

然后在控制器中。

[HttpPost]
public IActionResult SelectFund(SelectFundViewModel model){
   if(ModelState.IsValid){
      //check which properties have the SetsCondition Attribute
      //read the SomeEnumerationValue for them
      ..
      //profit
   }
}

只是不太确定我应该继承什么类型的属性,或者就此而言,如何检查特定的ViewModel属性是否用一个属性进行修饰。

任何非常感谢的帮助

2 个答案:

答案 0 :(得分:1)

您可以从继承自Attribute

创建属性
[System.AttributeUsage(System.AttributeTargets.Property)]
public class ConditionAttribute : System.Attribute
{
    public readonly string value;
    public ConditionAttribute(string value)
    {
        this.value = value;
    }
}

用法

[Condition("Some Value")]
public bool Property { get; set; }

然后,您可以通过反映访问此信息: 以下示例来自上面提供的链接:

System.Reflection.MemberInfo info = typeof(MyClass);
object[] attributes = info.GetCustomAttributes(true);
for (int i = 0; i < attributes.Length; i ++)
{
    System.Console.WriteLine(attributes[i]);
}

更新了链接https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/attributes

答案 1 :(得分:0)

必须从System.ComponentModel.DataAnnotations.ValidationAttribute继承,并且必须实现isValid方法。查看https://stackoverflow.com/a/11959931/1270813以获取示例