Проверьте, доступен ли URL - Помощь в оптимизации класса - PullRequest
14 голосов
/ 21 марта 2011

нетто 4 и с #.

Мне нужен класс, способный вернуть значение Bool, если Uri (строка) возвращает Коды состояния HTTP 200 .

На данный момент у меня есть этот код (он работает, используя попытку выяснить, можно ли подключиться к Uri), но я бы хотел использовать вместо этого «HttpStatusCode.OK».

  • Знаете ли вы лучший подход?

Спасибо.

public static bool IsReachableUri(string uriInput)
        {
            // Variable to Return
            bool testStatus;
            // Create a request for the URL.
            WebRequest request = WebRequest.Create(uriInput);
            request.Timeout = 15000; // 15 Sec

            WebResponse response;
            try
            {
                response = request.GetResponse();
                testStatus = true; // Uri does exist                 
                response.Close();
            }
            catch (Exception)
            {
                testStatus = false; // Uri does not exist
            }
            // Result
            return testStatus;
        }

1 Ответ

31 голосов
/ 21 марта 2011

Ну, во-первых, было бы лучше иметь оператор using для вашего ответа, а не просто вызывать Close - в этом случае нет большой разницы, но в целом операторы using - это путь.

Что касается проверки состояния результата - просто приведите ответ к HttpWebResponse, а затем используйте свойство StatusCode. Примерно так:

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
request.Timeout = 15000;
request.Method = "HEAD"; // As per Lasse's comment
try
{
    using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
    {
        return response.StatusCode == HttpStatusCode.OK;
    }
}
catch (WebException)
{
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...