代码之家  ›  专栏  ›  技术社区  ›  FunkMonkey33

asp.net web api中原语的模型验证

  •  0
  • FunkMonkey33  · 技术社区  · 7 年前

    我们定义了一个GET方法,它接受一个可空类型的长列表作为参数。类似于:

    [Route("api/person/get")]
    public IEnumerable<Person> Get(int? age = null, string name = null, bool? isDeceased = null)
    {
        ...
    }
    

    这里的想法是所有的输入参数都可以为空。它们要么提供一个参数值,要么不提供。如果它们提供了参数值,我们将使用它来过滤它们的结果。这消除了客户机构造json对象并将其传入的需要。

    问题1:这是个好主意吗?

    问题2是我们不希望他们过了“ABC”的年龄。如果是这样,则使用空值填充老化参数。这不太理想。相反,我们希望抛出一个适当的异常。

    如果看到很多关于定义validateModelattribute和用它装饰我的WebAPI方法的文章( https://www.jerriepelser.com/blog/validation-response-aspnet-core-webapi/ 例如)。我的问题是,如果任何可空参数实际上为null,则MultStase.ISHealm为false。所以除非他们为每个参数提供参数(我们的真实方法有67个),否则ModelState.isValid将是假的。

    提前谢谢你的帮助。

    亚伦

    2 回复  |  直到 7 年前
        1
  •  0
  •   codeMonkey mr. onoffon    7 年前

    ModelState 是MVC的东西,不是WebAPI的东西;这就是为什么它总是 false 是的。用可空参数来装饰签名没有什么错。如果您想为类型创建一些自定义错误,我建议您 this link 是的。如果你想勾搭 模型状态 要在webapi中工作,建议 this link 是的。

        2
  •  0
  •   FunkMonkey33    7 年前

    事实证明,MealStand实际上与WebApi一起工作,但是如果您有任何空白输入参数,它将返回IsHealm的false。所以如果你打电话

    https://myApiSite/api/person/get?name=Aaron&age=

    由于空白参数,IsFalm。

    另一方面,如果你打电话

    https://myApiSite/api/person/get?name=Aaron

    modelstate.isvalid将为true。年龄仍然是空白的,就像你没有通过的所有其他参数一样,但是模型会通过验证。想想看。

    谢谢。

    亚伦

    推荐文章