2013-07-11 2 views
0

У меня возникла небольшая проблема с подключением HttpStatusCode от ответа. Проблема в том, что файл существует. Я получаю ответ и могу читать состояние чтения, но когда файл не существует, я не вижу никакого статуса, даже если бы я попросил показать строку статуса. Вот мой код:Проблемы с чтением HttpStatusCode

Dim urls As New List(Of String) 
     urls.Add("http://www.domain.com/test.php") 
     urls.Add("http://www.domain.com/test2.php") 
     urls.Add("http://www.domain.com/index.php") 


     For Each Url As String In urls 
      Dim response As HttpWebResponse = Nothing 
      Try 
       Dim request As HttpWebRequest = Net.HttpWebRequest.Create(Url) 
       request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)" 
       request.Method = "GET" 
       response = request.GetResponse() 

      Catch webex As WebException 
      End Try 

      If response.StatusCode = HttpStatusCode.OK = True Then 
       MsgBox("File Url is correct: " & response.StatusCode.ToString) 
      ElseIf response.StatusCode = HttpStatusCode.NotFound = True Then 
       MsgBox("File Url is incorrect: " & Url) 
      Else 
       MsgBox(response.StatusCode.ToString) 
      End If 
     Next 
+0

возможно дубликат [Как правильно поймать 404 ошибку в .NET] (http://stackoverflow.com/questions/2149208/how-to-properly-catch-a-404-error-in- net) – CodeCaster

ответ

2

Когда сервер не возвращает код статуса успеха (2xx), структура всегда вызывает исключение. Однако вы все равно можете получить ответ от объекта исключения.

Function GetResponse(url As Uri) As WebResponse 
    Dim response As WebResponse 
    Dim request As HttpWebRequest = HttpWebRequest.Create(url) 
    Try 
     response = request.GetResponse() 
    Catch serverErrors As WebException When serverErrors.Response IsNot Nothing 
     response = serverErrors.Response 
    Catch otherExceptions As Exception 
     DoSomethingWith(otherExceptions) 
    End Try 
    Return response 
End Function 
0

Поправьте меня, если я ошибаюсь, но не должна эта часть:

ElseIf response.StatusCode = HttpStatusCode.NotFound = True Then 
      MsgBox("File Url is incorrect: " & Url) 

На самом деле быть:

ElseIf response.StatusCode = HttpStatusCode.NotFound = True Then 
      MsgBox("File Url is incorrect: " & Url & response.StatusCode.ToString) 

Если вы хотите StatusCode быть показано на рисунке.

Что касается Вашего комментария:

но когда файл не существует, я не вижу никакого статуса

Код поражая NotFound перечисление и входящего в блок кода, но вы Арен» t показывает статус вашего кода.

+0

Мне захотелось увидеть строку, файл которой не существует, когда статус HttpStatusCode.NotFound. Если бы это дало мне другой статус, почему он не показывает меня в 'Else MsgBox (response.StatusCode.ToString)'? – Chelovek

+0

'' почему он не показывает меня в Else MsgBox (response.StatusCode.ToString) "- потому что код вводит' ElseIf'. Исполнение не будет продолжаться до 'Else'. Если вы хотите, чтобы все их оценивали индивидуально, вам нужно использовать инструкции 'If' для всех из них. – DGibbs

+0

Но если я изменяю 'ElseIf response.StatusCode = HttpStatusCode.NotFound = True, то MsgBox (" URL-адрес файла: "и Url)' to 'ElseIf response.StatusCode = HttpStatusCode.OK = False Затем MsgBox (" File Url неверно: «& Url)' Я тоже этого не вижу. – Chelovek

2

Проблема заключается в том, что, когда файл не существует, он генерирует WebException, и ваш код молча «проглатывает» эти исключения. то есть. он ловит его и ничего не делает.

Вам нужно добавить код, который проверяет наличие ошибки внутри вашей инструкции catch.

Это может быть дубликатом How to properly catch a 404 error in .NET (хотя C# вместо VB)

Смежные вопросы