防止整数值在 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

如何配置模型绑定器以仅在布尔输入而不是整数输入上设置值(可能会给出一些验证错误)?

【问题讨论】:

如果值可以大于01,那么布尔值可能不是正确的类型? 我只是想看看布尔对于非布尔输入的行为。由于 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 数据

防止 ASP.NET Web API 路由引擎扣除自定义方法名

asp.net 验证以确保文本框具有整数值

ASP.NET Web API模型验证以及异常处理方式

ASP.NET Core 1 Web API 模型绑定数组

ASP.NET Web API 简介