代码之家  ›  专栏  ›  技术社区  ›  Erick T

如何将上下文传递给ASP.NET Core中深度嵌套对象上的自定义ValidationAttribute?

  •  0
  • Erick T  · 技术社区  · 7 年前

    我试图找出如何将动作参数的外部上下文与自定义验证属性联系起来。我有以下型号:

    public class DataValueValidator : ValidationAttribute
    {
        /// Create messages that include Guid Id
    }
    
    public class Data
    {
        [DataValueValidator]
        public string DataValue { get; set; }
    }
    
    public class Envelope
    {
        public Guid Id { get; set; }
        public Data Instance { get; set; }
    }
    

    Web API操作如下所示:

    public async Task<IActionResult> Save(
                [FromBody] IList<Envelope> envelopes)
    {
      look at ModelState to return error messages
    }
    

    我想要由创建的错误消息 DataValueValidatorAttribute 从信封实例获取Id(Guid)。

    在各种 DataValueValidator属性 方法我可以重载,我可以访问 Data DataValue 属性处于启用状态,但未指向 DataEnvelope 例子

    我可以想出几个选择,但没有一个看起来很好。

    第一种方法是从控制器操作手动调用所有验证方法。然后,我可以获取从属性返回的ValidationResult并更改错误消息。这样做似乎违背了使用ValidationAttribute的目的。

    我还考虑使用某种类型的线程本地存储来存储 Dictionary<Guid, Data> 然后在 DataValueValidator . 我不喜欢使用它,因为它不容易在将来进行推理或维护。

    在ASP.NET核心验证期间,将上下文向下传递到深度嵌套对象的最佳方法是什么?

    0 回复  |  直到 7 年前
    推荐文章