5

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

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

4

5 回答 5

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}")]

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

于 2011-11-30T23:50:20.057 回答
4

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

于 2011-11-30T23:51:35.937 回答
1

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

我发现最好的解决方案是实现验证属性并使用微软的 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 错误 - 并且响应正文将包含您指定的错误消息(“无效的输入字符串。”)。无需编写自定义错误处理逻辑 :)

于 2021-03-22T12:47:12.787 回答
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;
}

您可以删除静态或将函数放在某个实用程序类中

于 2011-12-01T04:26:34.910 回答
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
于 2016-03-11T03:15:57.280 回答