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

C# 为什么属性在类型转换错误时得到验证?,c#,asp.net-web-api,asp.net-web-api2,C#,Asp.net Web Api,Asp.net Web Api2,我对ASP.NET Web API中的模型验证有一个问题。这是一个有问题的模型: 公共密封类AccessTokenRequest { [必需] 公共Guid GameId{get;set;} [必需] 公共字符串GameAccessToken{get;set;} [范围(0,int.MaxValue)] 公共int?生存期{get;set;} } 当我为GameId传递一个无法转换为Guid的字符串时,返回两个验证错误。一是: 值“xxxxxxxxxxxxx”对GameId无效。 另一个是:

我对ASP.NET Web API中的模型验证有一个问题。这是一个有问题的模型:

公共密封类AccessTokenRequest
{
[必需]
公共Guid GameId{get;set;}
[必需]
公共字符串GameAccessToken{get;set;}
[范围(0,int.MaxValue)]
公共int?生存期{get;set;}
}
当我为
GameId
传递一个无法转换为
Guid
的字符串时,返回两个验证错误。一是:

值“xxxxxxxxxxxxx”对GameId无效。

另一个是:

该值是必需的。

我只想要第一个被归还。后者没有意义,因为已经提供了值


提前感谢。

老实说,我不确定在没有自定义验证属性的情况下是否可以

问题是提供无效的GUID,因为无法正确解析它,因此会导致
null
。活页夹尝试将
null
分配给具有
[必需]
属性的属性,从而给出
所需的值。
错误

让我们看看
[必需]
属性:

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

谢谢您的回复。但是
Guid
是一个结构。它不能是
null
@ultimawearm-是的,这是真的。不是
GameId
null
-由于转换失败,绑定器尝试将
null
分配给此属性。我可以详细说明我的答案,让它更清楚。好的,我明白了。我有override
IsValid
,它确实向函数传递了
null
。非常感谢你!