有没有办法验证GUID数据类型?
我正在使用验证属性。 http://msdn.microsoft.com/en-us/library/ee707335%28v=vs.91%29.aspx
答案 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