如何验证Guid数据类型?

时间:2011-11-30 23:43:58

标签: c# wpf entity-framework validation validationattribute

有没有办法验证GUID数据类型?

我正在使用验证属性。 http://msdn.microsoft.com/en-us/library/ee707335%28v=vs.91%29.aspx

5 个答案:

答案 0 :(得分:6)

您可以使用RegularExpressionAttribute。以下是使用格式xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

的示例
[RegularExpression(Pattern = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}")]

您还可以创建自定义验证属性,这可能是一种更清洁的解决方案。

答案 1 :(得分:3)

您可以编写自己的CustomValidationAttribute子类,通过使用System.Guid的TryParse method来确保该值是一个guid(感谢Jon!)。

答案 2 :(得分:1)

我知道这个问题真的很老,但我想我会补充我的答案,希望它可以帮助其他人在未来使用验证属性寻找最简单的解决方案。

我发现最好的解决方案是实现验证属性并使用 Microsoft 的 TryParse 方法(而不是编写我们自己的正则表达式):

public class ValidateGuid : System.ComponentModel.DataAnnotations.ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        return System.Guid.TryParse(value.ToString(), out var guid) ? ValidationResult.Success : new ValidationResult("Invalid input string.");
    }
}

然后像这样使用它:

    [ValidateGuid]
    public string YourId { get; set; }

另外一个好处是,如果应用程序正在验证 API 调用的请求正文并且 YourId 不是有效的 GUID,它将很好地响应 400 错误 - 并且响应正文将包含错误消息您指定的(“无效的输入字符串。”)。 无需编写自定义错误处理逻辑:)

答案 3 :(得分:0)

此功能可能对您有所帮助....

public static bool IsGUID(string expression)
{
    if (expression != null)
    {
        Regex guidRegEx = new Regex(@"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$");

        return guidRegEx.IsMatch(expression);
    }
    return false;
}

您可以删除静态或将功能放在某个实用程序类

答案 4 :(得分:0)

这将使用.Net的内置Guid类型进行验证,因此您不必使用自定义正则表达式(它没有经过Microsoft的严格测试):

public class RequiredGuidAttribute : RequiredAttribute
{
    public override bool IsValid(object value)
    {
        var guid = CastToGuidOrDefault(value);

        return !Equals(guid, default(Guid));
    }

    private static Guid CastToGuidOrDefault(object value)
    {
        try
        {
            return (Guid) value;
        }
        catch (Exception e)
        {
            if (e is InvalidCastException || e is NullReferenceException) return default(Guid);
            throw;
        }
    }
}

然后你就这样使用它:

    [RequiredGuid]
    public Guid SomeId { get; set; }

如果向此字段提供以下任何内容,它将最终作为默认值(Guid),并将被Validator捕获:

{someId:''}
{someId:'00000000-0000-0000-0000-000000000000'}
{someId:'XXX5B4C1-17DF-E511-9844-DC4A3E5F7697'}
{someMispelledId:'E735B4C1-17DF-E511-9844-DC4A3E5F7697'}
new Guid()
null //Possible when the Attribute is used on another type
SomeOtherType //Possible when the Attribute is used on another type