Web Api使用DataAnnotations验证可选的Url

时间:2017-11-09 17:42:23

标签: c# validation asp.net-web-api2

有没有办法让[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;

1 个答案:

答案 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));
}