Простая функция: проверьте, возвращает ли веб-сервер состояние HTTP, отличное от 200.
Private Function RemoteFileOk(ByVal Url As String) As Boolean
Dim req As HttpWebRequest = TryCast(WebRequest.Create(Url), HttpWebRequest)
req.Method = "HEAD"
Dim rsp As HttpWebResponse = TryCast(req.GetResponse(), HttpWebResponse)
Return (rsp.StatusCode = HttpStatusCode.OK)
End Function
Я получил его от этого ответа на " Как проверить, выходит ли файл на веб-сервере по его URL-адресу? ".
К сожалению, это не работает: выдается исключение System.Net.WebException: «Удаленный сервер возвратил ошибку: (404) Не найдено», когда URL-адрес указывает на несуществующую страницу.Я хотел бы иметь возможность проверить сервер с запросом HEAD (или что-то подобное), а затем иметь дело с 404 без необходимости перехвата исключений.
Мое исправление выглядит так:
Private Function RemoteFileOk(ByVal Url As String) As Boolean
Dim req As HttpWebRequest = TryCast(WebRequest.Create(Url), HttpWebRequest)
req.Method = "HEAD"
Try
Using rsp As HttpWebResponse = TryCast(req.GetResponse(), HttpWebResponse)
Return (rsp.StatusCode = HttpStatusCode.OK)
End Using
Catch ex As WebException
Return False
End Try
End Function
Но мне никогда не нравилось использовать операторы try-catch, когда кажется, что их можно избежать.
Есть ли другой, более аккуратный способ?