【问题标题】:Prevent integer values to set boolean parameter in ASP.NET Web API model binding?防止整数值在 ASP.NET Web API 模型绑定中设置布尔参数?
【发布时间】: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 将是公开的,任何人都可以发送任何值,因此我有责任至少验证输入。上述情况在某些情况下可能有效,但在我的情况下无效。

标签: c# asp.net asp.net-web-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”作为数据。我能想到的一种修改是在类型检查的错误上设置一些其他属性,并将其用作错误请求的逻辑。但是,如果有很多布尔输入,这将是一个痛苦。
猜你喜欢
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 2016-08-16
  • 2012-08-28
  • 1970-01-01
相关资源
最近更新 更多