2010-09-22 12 views
5

Ho trovato che HttpWebRequest lancia WebException per risorse non esistenti. Mi sembra molto strano come HttpWebResponse ha la proprietà StatusCode (l'elemento NotFount esiste). Pensi che abbia qualche motivo per questo o forse è solo questione di sviluppatori?HttpWebRequest lancia un'eccezione per 404

var req = (HttpWebRequest)WebRequest.Create(someUrl); 
using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()) { 
    if (response.StatusCode == HttpStatusCode.OK) { ...} 
} 
+0

l'API che stai chiamando deve restituire i codici di errore corretti nella risposta HTTP. sembra un problema per gli sviluppatori, probabilmente non stanno rilevando correttamente l'errore. – RPM1984

risposta

3

Questo è veramente un problema frustrante, che può essere aggirato utilizzando la seguente classe metodo di estensione e la chiamata request.BetterGetResponse()

//----------------------------------------------------------------------- 
// 
//  Copyright (c) 2011 Garrett Serack. All rights reserved. 
// 
// 
//  The software is licensed under the Apache 2.0 License (the "License") 
//  You may not use the software except in compliance with the License. 
// 
//----------------------------------------------------------------------- 

namespace CoApp.Toolkit.Extensions { 
    using System; 
    using System.Net; 

    public static class WebRequestExtensions { 
     public static WebResponse BetterEndGetResponse(this WebRequest request, IAsyncResult asyncResult) { 
      try { 
       return request.EndGetResponse(asyncResult); 
      } 
      catch (WebException wex) { 
       if(wex.Response != null) { 
        return wex.Response; 
       } 
       throw; 
      } 
     } 

     public static WebResponse BetterGetResponse(this WebRequest request) { 
      try { 
       return request.GetResponse(); 
      } 
      catch (WebException wex) { 
       if(wex.Response != null) { 
        return wex.Response; 
       } 
       throw; 
      } 
     } 
    } 
} 

Hai letto più su di esso nel mio blog post su questo tema http://fearthecowboy.com/2011/09/02/fixing-webrequests-desire-to-throw-exceptions-instead-of-returning-status/

1

Prova questo:

var req = (HttpWebRequest)WebRequest.Create(someUrl); 
req.Method = "Head"; 

using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()) { 
    if (response.StatusCode == HttpStatusCode.OK) { ...} 
} 

WebRequest and System.Net.WebException on 404, slow?