asp.net - 无法评估表达式

标签 asp.net .net vb.net visual-studio

我正在使用一个类来检查应用程序中的某些单词以防止 SQL 注入(inject)。

在类中,有一个 for 循环尝试将特定单词与黑名单中的单词进行匹配。 如果有匹配,我必须重定向到系统的错误页面。

但是,当找到匹配项并尝试重定向时,我不断收到错误“无法计算表达式。”

这是代码:

Private Sub CheckInput(ByVal parameter As String)
Try
    Dim errorPage As String = "error_page.aspx?Injection=" & parameter

    For i As Integer = 0 To blackList.Length - 1
        If (parameter.IndexOf(blackList(i), StringComparison.OrdinalIgnoreCase) >= 0) Then
            'Handle the discovery of suspicious Sql characters here 
            'generic error page on your site 
            HttpContext.Current.Response.Redirect(errorPage)
        End If
    Next

Catch ex As Exception
    Throw ex
End Try

一旦 Try block 捕获错误,它就会继续给出错误,并且不会重定向到错误页面。

有什么想法吗?

最佳答案

“无法计算表达式”来自 Visual Studio 调试器,当它看到 ThreadAbortException thrown by Response.Redirect 时。如果没有附加调试器,您的代码将按预期工作。

You can pass false to prevent the current request being ended (这就是 ThreadAbortException 的用途)。然后,您有责任优雅地“结束”请求。

FWIW,您还应该删除 try/catch,因为它正在提供 no useful purpose other than hiding any exceptions 。而且,如前所述,SQL 参数是防止注入(inject)的方法 - 而不是白名单。

关于asp.net - 无法评估表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10302914/

相关文章:

asp.net - 当我在 ASP.NET MVC 应用程序中查找 .json 文件时,出现 404 Not Found

.net - 错误-MSB3030 Microsoft.Common.targets(3390,5)从.NET 4.0配置文件切换到完整.NET 4.0

c# - Visual Basic .Net 中等效的公共(public)虚拟外部字符串

jQuery Full Calendar - 如何防止用户在非工作时间添加事件?

jquery - 无效的 Web 服务调用,缺少参数值,但我将其包含在调用中

.net - Xamarin项目的Targeted Framework如何改成4.0

c# - 没有 ConfigureAwait(false) 的等待在不同的线程上继续

asp.net - Gridview 将当前行与上一行进行比较

vb.net - 查找字符串中子字符串第一次出现的位置

c# - 以编程方式选择 ListBox 中的多个项目?