handlin Net.WebResponse与vb.Net中的select语句
我有下面的函数,它从某个页面获取html或xml源代码,当出现403异常时,我发现代码没有继续到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
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”找到它!调试菜单,然后点击异常。取消选中“抛出”列中的异常,您希望让程序在不停止调试器的情况下自动捕获这些异常。