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

C# 如何将上下文传递给ASP.NET Core中深度嵌套对象上的自定义ValidationAttribute?,c#,asp.net,asp.net-web-api,asp.net-core,C#,Asp.net,Asp.net Web Api,Asp.net Core,我试图找出如何将动作参数的外部上下文与自定义验证属性联系起来。我有以下型号: public class DataValueValidator : ValidationAttribute { /// Create messages that include Guid Id } public class Data { [DataValueValidator] public string DataValue { get; set; } } public class Enve

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

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
}
公共异步任务保存(
[FromBody]IList信封)
{
查看ModelState以返回错误消息
}
我希望由
DataValueValidatorAttribute
创建的错误消息具有信封实例的Id(Guid)

在我可以重载的各种
DataValueValidatorAttribute
方法中,我可以访问
DataValue
属性启用的
Data
对象,但不能访问
DataEnvelope
实例

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

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

我还考虑使用某种类型的线程本地存储来存储
字典
,然后在
DataValueValidator
中检索字典。我不喜欢使用它,因为它不容易在将来进行推理或维护

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