2015-06-03 3 views
4

Я хочу загрузить одно изображение из url с помощью консольного приложения.HttpWebRequest.GetResponse методы выбрасывает исключение 404

Я использовал следующий код:

string sourceUrl = "http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg"; // Not Found 
       //string sourceUrl = "http://i.ytimg.com/vi/OrxZAN1FZUY/default.jpg"; // Found 
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sourceUrl); 
       HttpWebResponse response = null; 
       try 
       { 
        response = (HttpWebResponse)request.GetResponse(); 
       } 
       catch (Exception) 
       { 

       } 

Выше код генерирует исключение в строке "ответ = (HttpWebResponse) request.GetResponse();"

но когда я обращаюсь к «http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg» url в моем браузере, тогда изображение будет отображаться.

Что мне здесь не хватает?

ответ

1

Я пробовал этот URL-адрес «http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg» в Chrome инструменты для разработчиков. Он также получает 404, но ответ включает изображение, которое отображается.

Ваш код не является причиной исключения. Сайт возвращает 404, и ваш код получает исключение.

Вы можете написать логику, чтобы посмотреть ответ, даже если вы получаете 404 и решаете, принимать ли это в любом случае, как это делает браузер.

Похоже, вы можете получить ответ, возвращенный сайтом, если вы поймаете WebException, что позволяет вам увидеть статус запроса HTTP и ответ в документации.

Пример из .Net 4.5 дока ...

try 
     { 
      // Creates an HttpWebRequest for the specified URL. 
      HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
      // Sends the HttpWebRequest and waits for a response. 
      HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
      if (myHttpWebResponse.StatusCode == HttpStatusCode.OK) 
       Console.WriteLine("\r\nResponse Status Code is OK and StatusDescription is: {0}", 
            myHttpWebResponse.StatusDescription); 
      // Releases the resources of the response. 
      myHttpWebResponse.Close(); 

     } 
    catch(WebException e) 
     { 
      Console.WriteLine("\r\nWebException Raised. The following error occured : {0}",e.Status); 
     } 
    catch(Exception e) 
    { 
     Console.WriteLine("\nThe following Exception was raised : {0}",e.Message); 

WebException имеет отклик и состояние свойство. Таким образом, похоже, что .Net-способ справиться с этим - ухватить WebException и определить, как обращаться с информацией о статусе и ответе (при необходимости).

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