handlin Net.WebResponse与vb.Net中的select语句

handlin Net.WebResponse与vb.Net中的select语句,vb.net,try-catch,httpwebresponse,Vb.net,Try Catch,Httpwebresponse,我有下面的函数,它从某个页面获取html或xml源代码,当出现403异常时,我发现代码没有继续到select语句 Public Function GetPageHTML(ByVal URL As String, _ Optional ByVal TimeoutSeconds As Integer = 10) _ As String ' Retrieves the HTML from the specified URL, ' u

我有下面的函数,它从某个页面获取html或xml源代码,当出现403异常时,我发现代码没有继续到select语句

   Public Function GetPageHTML(ByVal URL As String, _
        Optional ByVal TimeoutSeconds As Integer = 10) _
        As String
        ' Retrieves the HTML from the specified URL,
        ' using a default timeout of 10 seconds
        Dim objRequest As Net.WebRequest
        Dim objResponse As Net.WebResponse
        Dim objStreamReceive As System.IO.Stream
        Dim objEncoding As System.Text.Encoding
        Dim objStreamRead As System.IO.StreamReader


        ' Setup our Web request
        objRequest = Net.WebRequest.Create(URL)
        objRequest.Timeout = TimeoutSeconds * 5000
        ' Retrieve data from request

Try
        objResponse = objRequest.GetResponse 'some times it gives an error server unavailable 503

        Select Case CType(objResponse, Net.HttpWebResponse).StatusCode
            Case Net.HttpStatusCode.RequestTimeout
                Return "BadRequest"
            Case 403
                Return "BadRequest"
            Case Net.HttpStatusCode.GatewayTimeout
                Return "BadRequest"
            Case Net.HttpStatusCode.InternalServerError
                Return "BadRequest"
            Case Net.HttpStatusCode.BadRequest
                Return "BadRequest"
            Case Net.HttpStatusCode.OK

                objStreamReceive = objResponse.GetResponseStream
                objEncoding = System.Text.Encoding.GetEncoding( _
                    "utf-8")

                objStreamRead = New System.IO.StreamReader( _
                    objStreamReceive, objEncoding)
                ' Set function return value

                GetPageHTML = objStreamRead.ReadToEnd()
                ' Check if available, then close response
                If Not objResponse Is Nothing Then
                    objResponse.Close()
                End If
            Case Else
                MsgBox("Case Else")

        End Select
catch
Return ""
End Try
    End Function
那么我该如何解决这个问题呢?调试器在这一行中显示异常

objResponse = objRequest.GetResponse 'some times it gives an error server unavailable 503 or 403
所以它不会进入选择状态

再次尝试解决同样的问题,它不会捕获错误,也不会显示异常消息

您是否处于调试模式?您可能将VisualStudio设置为捕获所有异常,而不管您是否有catch子句。尝试继续执行,看看catch子句是否被命中。我尝试了,在
Case Net.HttpStatusCode.OK
中设置了一个消息框,结果显示,但是当我得到403错误时,它不会访问
Case Net.HttpStatusCode.Forbidden
,并且它在调试程序中显示异常。异常在到达Case Net.HttpStatusCode.Forbidden之前发生,因此该案例不会执行。我说的是Catch子句-尝试在MsgBox(ex.Message)上放置一个断点,并在异常发生后继续执行,然后查看新断点是否被命中。是的,它似乎被命中,并且似乎工作正常,但为什么在有try station的情况下,我会在调试器上获得异常,当我在异常发生后单击debuggung按钮时,代码工作正常,它会按预期返回“BadRequest”找到它!调试菜单,然后点击异常。取消选中“抛出”列中的异常,您希望让程序在不停止调试器的情况下自动捕获这些异常。