C# 为什么属性在类型转换错误时得到验证?
我对ASP.NET Web API中的模型验证有一个问题。这是一个有问题的模型: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无效。 另一个是:
公共密封类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
分配给此属性。我可以详细说明我的答案,让它更清楚。好的,我明白了。我有overrideIsValid
,它确实向函数传递了null
。非常感谢你!