为什么属性在类型转换错误时得到验证?

时间:2015-07-21 05:36:25

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

我在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.

我只希望第一个返回。后者没有意义,因为已经提供了价值。

提前致谢。

1 个答案:

答案 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方法。