当值相等时,GreaterThan 的 PostSharp 代码合同不会触发

PostSharp code contract for GreaterThan does not fire when the values are equal

在使用 postsharp 代码合同时,我将 GreaterThan 属性设置为 0。我有一个 ID 装饰有 GreaterThan 合约的动作

   public virtual ActionResult Edit([GreaterThan(0)] int id) 

当我调用 http://localhost/Items/Edit/-1 时,出现以下错误

The parameter 'id' must be greater than 0. Parameter name: id

当我调用 http://localhost/Items/Edit/0 时,我没有得到那个错误。

好像参数大于或等于。我可以将它设置为 .5,但是我的错误消息看起来很奇怪,因为它会说 The parameter 'id' must be greater than 0.5

如果这是一个错误并且您的号码将变为零,那么您可以尝试使用:

"StrictlyPositive",其中 要求值严格大于 0

我知道这不是一个好的解决方案,但就目前而言。

这是由于命名有点笨拙造成的。

有两个约束:GreaterThanStrictlyGreaterThan。我认为这个信息澄清了它:-) - 你必须在你的用例中使用 StrictlyGreaterThan

是的,"greater than"是严格不等式,"greater than or equal"是非严格不等式,所以GreaterThan的命名是不正确的。

好吧,我们知道了,但是 API 发布后就不可能更改 public。所以这个有趣的思维弯曲问题实际上是一个功能...