我在ASP.NET Web API中有关于模型验证的问题。这是一个有问题的模型:
public sealed class AccessTokenRequest
{
[Required]
public Guid GameId { get; set; }
[Required]
public string GameAccessToken { get; set; }
[Range(0, int.MaxValue)]
public int? Lifetime { get; set; }
}
当我传递的字符串无法转换为Guid
GameId
时,会返回两个验证错误。一个是:
The value 'xxxxxxxxxxxxxxx' is not valid for GameId.
另一个是:
The value is required.
我只希望第一个返回。后者没有意义,因为已经提供了价值。
提前致谢。
答案 0 :(得分:0)
说实话,我不确定是否可以在不制作自定义验证属性的情况下使用。
问题是提供无效的GUID,因为无法正确解析,因此它会提供null
。活页夹尝试将null
分配给具有[Required]
属性的属性,因此会出现The value is required.
错误。
让我们来看看[Required]
属性:
public override bool IsValid(object value)
{
if (value == null)
return false;
string str = value as string;
if (str != null && !this.AllowEmptyStrings)
return str.Trim().Length != 0;
return true;
}
正如您所看到的,检查null
值。
您可以从头开始编写新属性,也可以从RequiredAttribute
派生并覆盖IsValid
方法。