读取控制器上的自定义属性参数 post

Read custom attribute parameter on controller post

我想编写一个自定义属性,我可以用它来装饰 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 属性 是否装饰有一个属性。

非常感谢任何帮助

必须继承自System.ComponentModel.DataAnnotations.ValidationAttribute,并且必须实现isValid 方法。检查 示例

您可以通过继承 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; }

然后您可以通过反射访问此信息: 以下示例取自上面提供的 link:

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

已更新 link https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/attributes