防止整数值在 ASP.NET Web API 模型绑定中设置布尔参数?
Posted
技术标签:
【中文标题】防止整数值在 ASP.NET Web API 模型绑定中设置布尔参数?【英文标题】:Prevent integer values to set boolean parameter in ASP.NET Web API model binding? 【发布时间】:2018-09-22 16:41:03 【问题描述】:我正在开发一个 ASP.NET Web API,其中一个方法将以下模型作为输入参数
public InputModel
int Id get; set;
bool? IsTrue get; set;
它适用于真假值。我试图检查它对于非布尔值的行为。所以我提供了输入并得到了一些结果
isTrue = 0 -> 模型设置为 false isTrue = 1 -> 模型设置为 true isTrue = 2 -> 模型设置为 true isTrue = -1 -> 模型设置为真
这是我没想到的。对于所有非零整数,模型设置为 true
如何配置模型绑定器以仅在布尔输入而不是整数输入上设置值(可能会给出一些验证错误)?
【问题讨论】:
如果值可以大于0
或1
,那么布尔值可能不是正确的类型?
我只是想看看布尔对于非布尔输入的行为。由于 API 将是公开的,任何人都可以发送任何值,因此我有责任至少验证输入。上述情况在某些情况下可能有效,但在我的情况下无效。
【参考方案1】:
你可以定义属性的set方法如下:
public InputModel
int Id get; set;
private bool istrue;
bool? Istrue
get
return istrue;
set
if (value.GetType() == typeof(bool))
istrue = value;
else
istrue = false;
【讨论】:
这会将每个非布尔输入的属性设置为 false,我不知道是否由于非布尔输入而设置了 false,或者客户端已明确发送“false”作为数据。我能想到的一种修改是在类型检查的错误上设置一些其他属性,并将其用作错误请求的逻辑。但是,如果有很多布尔输入,这将是一个痛苦。以上是关于防止整数值在 ASP.NET Web API 模型绑定中设置布尔参数?的主要内容,如果未能解决你的问题,请参考以下文章
防止在 ASP.NET MVC 中缓存 WEB API 数据