线程在Response.Redirect中被中止

时间:2015-02-03 14:16:21

标签: asp.net vb.net

我正在编写一个类来验证会话。

我收到此错误

  

线程被中止

并且在研究中发现它的方法是使用false参数,但使用该参数不会重定向,而是允许重定向行之后的代码执行。 这里必须有一些简单而基本的东西,我缺少,下面是我的代码。 它突破了InvalidAccess()方法。

Public Sub New()
        CheckSessionCustomerID()
        If GotConnectionString() = False Then
            InvalidAccess()
        End If
    End Sub

    Public Function GotConnectionString() As Boolean
        GotConnectionString = False
        Try
            If PublicDBConnectionStringName.Trim = String.Empty Then
                GotConnectionString = False
            Else
                PublicConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings(PublicDBConnectionStringName).ToString
                If PublicConnectionString.Trim <> String.Empty Then
                    GotConnectionString = True
                End If
            End If
        Catch ex As Exception
            ErrorLogging.LogError(MethodBase.GetCurrentMethod().DeclaringType.Name, MethodInfo.GetCurrentMethod().Name.ToString(), PublicBBTCustomerID & "|" & ex.Message.ToString())
            GotConnectionString = False
        End Try
    End Function

    Public Sub CheckSessionCustomerID()
        Dim SessionEmployeeID As Integer
        Try
            If PublicTesting Then
                SessionEmployeeID = 1
            Else
                If IsNothing(HttpContext.Current.Session("EmployeeIDLoggedIn")) Then
                    InvalidAccess()
                ElseIf HttpContext.Current.Session("EmployeeIDLoggedIn").ToString = "0" Then
                    InvalidAccess()
                Else
                    SessionEmployeeID = Val(HttpContext.Current.Session("EmployeeIDLoggedIn"))
                    HttpContext.Current.Session("EmployeeIDLoggedIn") = SessionEmployeeID.ToString()
                End If
            End If
        Catch ex As Exception
            InvalidAccess()
        End Try
    End Sub
    Private Sub InvalidAccess()
        Try
            System.Web.HttpContext.Current.Response.Redirect("/InvalidAccess.aspx")
        Catch ex As Exception
            System.Web.HttpContext.Current.Response.Redirect("/Login.aspx?ID=" & PubliCustomerID & "&ID2=5")
        End Try
    End Sub

2 个答案:

答案 0 :(得分:1)

当你重定向并希望停止进一步执行请求时,线程被中止是完全正常的。

InvalidAccess方法中删除Try...Catch块 - 这是毫无意义的。 Response.Redirect永远不会抛出你感兴趣的例外。

在您的方法中使用此try...catch尝试实现的目标并不十分清楚。

或者,您可以在false中使用Response.Redirect参数。

答案 1 :(得分:0)

您可以在Response.Redirect上使用false参数,但是如果您想要的话,还必须完成停止执行的请求:

Response.Redirect("/InvalidAccess.aspx", False)
HttpContext.Current.ApplicationInstance.CompleteRequest()

http://www.blakepell.com/asp-net-avoid-threadabortexception-on-response-redirect