具有StringComparison
的EF核心新验证属性DeniedValues
不起作用:
[DeniedValues("bad", "lol", StringComparison.OrdinalIgnoreCase)]
public string Name { get; set; } = "";
有什么解决办法吗?
具有StringComparison
的EF核心新验证属性DeniedValues
不起作用:
[DeniedValues("bad", "lol", StringComparison.OrdinalIgnoreCase)]
public string Name { get; set; } = "";
有什么解决办法吗?
验证不是由EF Core执行,而是由System.DataModel.DataAnnotations中的类执行.DeniedValuesAttribute使用Equals
来执行类型的默认相等性判断.它不允许通过标志或比较器进行变化:
public override bool IsValid(object? value)
{
foreach (object? denied in Values)
{
if (denied is null ? value is null : denied.Equals(value))
{
return false;
}
}
return true;
}
你必须创建自己的自定义验证属性来使用不区分大小写的比较,可能是这样的:
[CLSCompliant(false)]
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class DeniedStringValuesAttribute(StringComparison comparisonType,params string?[] values)
: DeniedValuesAttribute (values)
{
public StringComparison ComparisonType { get; }=comparisonType;
public override bool IsValid(object? value)
{
foreach (string? denied in Values)
{
if (String.Equals(denied,value as string,ComparisonType))
{
return false;
}
}
return true;
}
}