2010-09-22 12 views
5

He encontrado que HttpWebRequest está lanzando WebException para recursos no existentes. Me parece muy extraño, ya que HttpWebResponse tiene la propiedad StatusCode (existe el elemento NotFount). ¿Crees que tiene alguna razón para eso o tal vez solo sea cuestión de desarrolladores?HttpWebRequest está lanzando una excepción para 404

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

la API que está llamando debe devolver los códigos de error correctos en la respuesta HTTP. suena como un problema de desarrollador para mí, probablemente no capten el error correctamente. – RPM1984

Respuesta

3

Este es realmente un problema frustrante, que se puede trabajar en alrededor de utilizando la siguiente clase de método de extensión y llamando 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; 
      } 
     } 
    } 
} 

Usted lee más sobre esto en mi blog el este tema en http://fearthecowboy.com/2011/09/02/fixing-webrequests-desire-to-throw-exceptions-instead-of-returning-status/

1

Prueba esto:

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?

Cuestiones relacionadas