【发布时间】:2021-08-05 05:30:29
【问题描述】:
我有一个 .Net 5 应用程序并想为我的配置添加验证器。鉴于此示例选项
public sealed class DatabaseOptions
{
public string ConnectionString { get; set; }
}
我目前用这个实现来验证它
public sealed class DatabaseOptionsValidator : IValidateOptions<DatabaseOptions>
{
public ValidateOptionsResult Validate(string name, DatabaseOptions databaseOptions)
{
List<string> validationFailures = new List<string>();
if (string.IsNullOrEmpty(databaseOptions.ConnectionString))
validationFailures.Add($"{nameof(databaseOptions.ConnectionString)} is required.");
// ...
if (validationFailures.Any())
{
return ValidateOptionsResult.Fail(validationFailures);
}
return ValidateOptionsResult.Success;
}
}
我想避免实现自己的验证检查和错误消息,因为我知道数据注释已经完成了工作。
我将选项模型修改为这个
public sealed class DatabaseOptions
{
[Required]
[MinLength(9999999)] // for testing purposes
public string ConnectionString { get; set; }
}
并希望找到一种方法来触发模型验证
public sealed class DatabaseOptionsValidator : IValidateOptions<DatabaseOptions>
{
public ValidateOptionsResult Validate(string name, DatabaseOptions databaseOptions)
{
List<string> validationFailures = new List<string>();
// trigger the model validation and add every error to the validationFailures list
if (validationFailures.Any())
{
return ValidateOptionsResult.Fail(validationFailures);
}
return ValidateOptionsResult.Success;
}
}
但不幸的是,我无法这样做。调试器点击了验证器,但我如何在 Validate 方法中触发验证?
【问题讨论】:
-
你不能只通过
ValidateDataAnnotations使用DataAnnotations 验证器吗?见这里stackoverflow.com/q/55025197/491907。不是完全重复,但问题本身显示了一个示例,答案显示了数据注释验证器实际上是如何在内部工作的,因此您可以在必要时复制该实现。这实际上是相当基本的
标签: c# asp.net-web-api .net-core asp.net-core-webapi .net-5