代码之家  ›  专栏  ›  技术社区  ›  Jamie Ide

我应该信任ASP.NET数据类型检查验证吗?

  •  0
  • Jamie Ide  · 技术社区  · 15 年前

    我正在使用ASP.NET CompareValidator控件进行数据类型检查。我应该足够信任这些控件来直接分析它们的值,还是应该使用台盼?

    例子:

    <asp:TextBox ID="uxVolume" runat="server" />
    <asp:CompareValidator ID="uxVolumeDataTypeValidator" runat="server" 
        ControlToValidate="uxVolume" ErrorMessage="Volume must be a number." 
        Type="Double" Operator="DataTypeCheck" Text="*" Display="Dynamic" />
    

    在代码隐藏页中,我应该分析:

    var volume = double.Parse(uxVolume.Text);
    // do something
    

    或TryParse:

    double volume;
    if (double.TryParse(uxVolume.Text, out volume))
    {
        // do something
    }
    
    5 回复  |  直到 15 年前
        1
  •  1
  •   Wyatt Barnett    15 年前

    就我个人而言,我不会麻烦的。如果验证器失败,这意味着真正的错误发生了,所以在double.parse()上的例外情况在当时可能并不完全是坏的。

    我已经用了几千次了,没出什么问题。…

        2
  •  2
  •   superlogical    15 年前

    是的,但是如果有人更改/删除了您的验证器,那么您确实希望抛出异常,这样您就知道应用程序有问题。及早失败很快失败(或类似的事情)。此外,您也不必添加额外的try catch块,因为这应该是一个异常,并由全局错误处理程序捕获。在web配置中,customerErrors code=500或类似的代码。

        3
  •  1
  •   superlogical    15 年前

    在这种情况下,您希望验证程序正确运行,这样我就不会使用台盼。这样,如果有人更改了您的验证器,那么将抛出异常,而不是在使用了台盼之后悄悄地失败。

        4
  •  0
  •   ichiban    15 年前

    根据我的经验,信任验证器是安全的。但是,在代码栏中做一个胰蛋白酶是不会出错的。

        5
  •  0
  •   kemiller2002    15 年前

    我会用胰蛋白酶。验证器应该工作。我还没有看到,也没有实例。也就是说,您的代码应该始终尝试保护自己不受坏值的影响。代码现在可能有验证器,但将来可能没有,所以您不能依赖它在那里,仅仅因为验证器应该工作,并不意味着它总是会(您可以在验证器在服务器端触发之前意外地移动代码来解析变量)。简单地说,用Tryparse替换Parse,没有理由不使用Tryparse并保护自己免受未验证输入项的潜在问题的影响。

    回应杰克的评论。他写的是通过抛出一个错误来知道验证是否不起作用,在这种情况下,它必须在一个try-catch块中。因此,在本例中,您实际执行的操作与台盼语句相同,只是您必须编写额外的代码来处理抛出的潜在异常,抛出异常比检查bool是否成功慢。