asp.net web api文档中一个不理解的地方

文档链接如下:
https://docs.microsoft.com/zh...

模型中的字段设置了required,就必须不为null,结果又有问号修饰符表示字段可以为null?这两个组合在一起不是矛盾吗?有点不理解😵,感觉文档中这种情况用一个问号修饰符就行了好像不需要required呀,前端传了值就赋传的值,没传就赋null,就能区分“零”和“未设置”了:
image.png
image.png
还有就是字段的4种不同情况没搞太明白--没有required没有问号,有问号没有required,有required没有问号,有required有问号

阅读 2.5k
2 个回答

看你这个 Model 用在哪儿了。

比如它可能是个 ViewModel,放在 aspx 里充当表单绑定的模型使用。

如果你定义成 double 类型,那么这个表单的输入框里就会显示默认值 0、而不是空;定义成 double? 了才会初值是空。而 [Required] 特性表明这个字段在提交表单时必须要有值。

再比如它可能是个 DTO,在 Service 中传递时允许该字段为空、但客户端 POST 时必须赋值。


现如今前后端分离很流行,后端只提供 WebAPI 的话这么写就没什么太大用处了。也不推荐 DTO 之类的模型复用 Request Model。

问号是语法层面的声明,Required 是语义层面的声明。

Required 声明的 Model,在使用的时候(多数是传参)会判断其是具有有效值。而 decimal? 仅仅声明这个变量/成员可能为 null

如果举一个例子,就是在参数传入的时候,通过 Required 保证一定传了这个参数。但实际上,可能在后面的业务处理(或者更复杂的有效性检查代码)中,在某些条件下将 Price 设置为 null ……

—— 简单地说就是,你必须要传(Required),但我可以不用(decimal?)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进