有没有办法让[Url]验证可选?
作为一个例子
public class Company
{
[Required, StringLength(63, MinimumLength = 2)]
public string Name { get; set; }
[Url, StringLength(127)]
public string Url { get; set; }
}
上述验证与我的预期完全相同,但Url属性不能是可选的。如果它是空白的,我不希望验证抛出错误,而我只是希望它仅在用户输入值时才进行验证。
更新: 考虑下面的答案哈米德沙希德。我刚刚添加了一个条件来解决我的问题,直到出现更好的事情:
//Making url validation optional, fix
if (company.Url == string.Empty) company.Url = null;
答案 0 :(得分:2)
对于null值,URLAttribute验证返回true。如果URL属性的值为NULL,则将其视为有效值。如果您将其设置为空字符串,则将其视为无效。
下面的代码显示了UrlAttribute类的反编译版本
// System.ComponentModel.DataAnnotations.UrlAttribute
[__DynamicallyInvokable]
public override bool IsValid(object value)
{
if (value == null)
{
return true;
}
string text = value as string;
if (UrlAttribute._regex != null)
{
return text != null && UrlAttribute._regex.Match(text).Length > 0;
}
return text != null && (text.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) || text.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase) || text.StartsWith("ftp://", StringComparison.InvariantCultureIgnoreCase));
}