gpt4 book ai didi

.net - 可选参数 : "empty" vs "not provided"

转载 作者:行者123 更新时间:2023-12-01 05:14:30 24 4
gpt4 key购买 nike

有没有办法区分空值和根本没有提到的值?

例如,我希望客户端能够更新配置文件并且只影响请求中指定的值......即使是空/空值。

所以给定一个名称=“Sherlok”和出生日期=“1月6日”的个人资料:

POST api/profiles/update?name=Sherlock >> only modifies name

POST api/profiles/update?birthdate=&name=Sherlock >> modifies name AND clears birthdate

有没有办法区分这两种情况下的生日参数,还是我需要求助于魔法值?

最佳答案

实际上有很多方法可以做到这一点。

  • 正如@Badri 建议的那样,您可以使用 Request直接在你的行动中反对。这是一种非常直接和简单的方法,但是将 Controller 逻辑与格式化/绑定(bind)逻辑混合在一起。如果您想创建更好的关注点分离,请尝试以下方法之一。
  • 有多个parameter binding mechanisms你可以选择。在我看来,自定义模型绑定(bind)器在这种情况下可以很好地工作。您可以访问 Request模型绑定(bind)器中的对象并使用类似于@Badri 的代码的东西来设置您期望的值( String.Emptynull ),然后再将它们传递给您的操作。
  • 生日字段的值提供者可能是更好的选择。您正在传递一个最终可以转换为 DateTime 对象的字符串。如果您指定该参数应使用自定义值提供程序(例如 IntuitiveDateTimeValueProvider ),您实际上可以将操作中的参数类型更改为 DateTimeNullable<DateTime> ( DateTime? ) 并让值提供者适本地填充值。您也可以对想要区分空和空的更简单的字符串使用类似的策略(例如,ExistenceTestingStringValueProvider)。
  • 创建额外的路线/行动。如果有很多参数,这不是一个好的选择,因为可能的组合太多了,但如果只有几个,这是一个非常简单的解决方案。一种方法是简单地为每个组合创建方法重载。如果只有 name 的过载被击中,表示birthdate没有指定,但如果两个参数的重载都被击中,这意味着 birthdate已指定,即使其值为 null ,为您提供一种区分指定但为空的参数值和未指定的参数值的方法。
  • 关于.net - 可选参数 : "empty" vs "not provided",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22003933/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com