/ / HttpWebRequest.GetResponse metódy hodí 404 výnimku - c #, asp.net, webové aplikácie

Metódy HttpWebRequest.GetResponse ukladajú výnimku 404 - c #, asp.net, webové aplikácie

Chcem stiahnuť jeden obrázok z adresy URL pomocou konzolovej aplikácie.

Použil som nasledujúci kód:

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)
{

}

Nad kódom sa vyskytuje výnimka v riadku "response = (HttpWebResponse) request.GetResponse ();"

ale keď pristupujem "http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg"url v prehliadači, potom sa zobrazí obrázok.

Čo tu chýba?

odpovede:

1 pre odpoveď č. 1

Skúšal som túto adresu URL "http://i.ytimg.com/vi/pvBnYBsUi9A/default.jpg"v prehliadači Chrome nástroje pre vývojárov. Taktiež prijíma 404, ale odpoveď obsahuje aj obrázok, ktorý zobrazuje.

Váš kód nie je príčinou výnimky. Stránka vráti 404 a váš kód dostane výnimku.

Môžete napísať logiku, aby ste sa pozreli na odpoveď, aj keď dostanete 404 a rozhodnete sa, či ho budete mať, rovnako ako to robí prehliadač.

Zdá sa, že môžete získať odpoveď vrátená webom, ak sa chystáte WebException, čo vám umožní vidieť stav žiadosti http a odpoveď podľa dokumentácie.

Príklad z verzie .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("rnResponse Status Code is OK and StatusDescription is: {0}",
myHttpWebResponse.StatusDescription);
// Releases the resources of the response.
myHttpWebResponse.Close();

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

WebException má vlastnosti Odozva a Stav. Takže to vyzerá ako .Net spôsob, ako sa vysporiadať s týmto je zachytiť WebException a určiť, ako sa vysporiadať s obsahom stavu a odpovede (ak je to potrebné).