作者:月光下大手拉S小手 | 来源:互联网 | 2023-02-05 12:24
对于一个属性[Required]
和可空的属性意味着什么?(下面的例子)似乎如果它[Required]
不可能null
(没有价值),如果它能够是null
它不可能是[Required]
.
[Required]
public DateTime? OrderDate { get; set; }
小智..
27
使属性可为空并且使用该[Required]
属性标记的原因是为了防止欠发布攻击.它还允许您在视图中显示初始空值,而不是属性的默认值.这通常使用视图模型中的值类型属性来完成.
发布不足的攻击是指恶意用户修改请求以省略请求中属性的值.如果属性是DateTime
(不可为空),则会DefaultModelBinder
将值初始化为default(01/01/0001
),并且不会ModelState
生成错误.结果,即使它不是您所期望的,也可以保存该值.
如果属性是DateTime?
(可空)[Required]
,然后如果恶意用户确实省略了请求中的属性,那么ModelState
将生成错误,因为请求中有一个值,并且视图将被返回,因此无效数据将不会得救
另请参阅Brad Wilson 在ASP.NET MVC中的文章输入验证与模型验证以及标题为"欠发布"问题的部分.
1> 小智..:
使属性可为空并且使用该[Required]
属性标记的原因是为了防止欠发布攻击.它还允许您在视图中显示初始空值,而不是属性的默认值.这通常使用视图模型中的值类型属性来完成.
发布不足的攻击是指恶意用户修改请求以省略请求中属性的值.如果属性是DateTime
(不可为空),则会DefaultModelBinder
将值初始化为default(01/01/0001
),并且不会ModelState
生成错误.结果,即使它不是您所期望的,也可以保存该值.
如果属性是DateTime?
(可空)[Required]
,然后如果恶意用户确实省略了请求中的属性,那么ModelState
将生成错误,因为请求中有一个值,并且视图将被返回,因此无效数据将不会得救
另请参阅Brad Wilson 在ASP.NET MVC中的文章输入验证与模型验证以及标题为"欠发布"问题的部分.
2> Max Toro..:
它可以为空,因此表单不会显示初始值0001-01-01T00:00:00
,因为它没有任何意义.
需要强制用户输入内容.