2011-05-06 21 views
7

Estoy trabajando en la construcción de una interfaz de cliente REST fluida en la parte superior de los tipos HttpWebRequest/HttpWebResponse en .NET. Hasta ahora, todo bien ... sin embargo yo estoy tratando de desarrollar un marco de seguridad conectable que puede manejar de forma automática la seguridad de negociación manera, refresca simbólicos, etc.¿Hay alguna manera de cambiar el comportamiento de HttpWebRequest en los códigos de estado 400/500?

me he encontrado un problema debido a la naturaleza de cómo el trabajo HttpWebRequest/Response cuando se encuentran con un código de estado HTTP de 400 series o 500 series. En lugar de simplemente establecer las propiedades .StatusCode y .StatusDescription y permitirle manejar de la manera que desee, lanzan un WebException. En términos generales, esto probablemente no sea un problema ... sin embargo, la forma en que estamos autenticando (derivado de OAuth 2.0), necesito manejar ciertos errores de la serie 400 sin que se produzca una excepción.

¿Hay alguna forma de reconfigurar HttpWebRequest/Response para NO arrojar WebException, y permitir que el consumidor determine su propio manejo de errores? Sé que hay algunas formas redondas de manejar Expect-100-Continue con servidores Http1.0 más antiguos ... Tengo curiosidad de saber si existe una forma similar de deshabilitar WebExceptions.

(Ah, y simplemente no puedo resistir ... un GRAN OL 'GRITO hacia mis amigos MARAVILLOSOS en RedGate por quitar ilegalmente la versión GRATUITA de Reflector 6 licenciada ... podría ser capaz de averiguar esto por mi cuenta si pudiera espiar el código ... pero por desgracia ... Reflector es lamentablemente una opción inviable ahora que se ha consumido a través de la autolisis.; P)

+1

Por lo que respecta al reflector, intente utilizar ILSpy. – BKewl

Respuesta

8

Tuve un problema similar y resuelto con el siguiente método auxiliar:

public static HttpWebResponse MakeRequest(HttpWebRequest request) 
{ 
    try 
    { 
     return (HttpWebResponse)request.GetResponse(); 
    } 
    catch (WebException we) 
    { 
     if (we.Response != null) 
     { 
      return (HttpWebResponse)we.Response; 
     } 
     throw; 
    } 
} 
+1

Gracias por la respuesta. Finalmente terminé haciendo más o menos lo mismo. No estoy seguro de por qué Microsoft eligió obligar a los usuarios a detectar una excepción en el caso de un código de estado de tipo de error ... pero realmente dificulta las cosas. Un pequeño y agradable ayudante ... podría tratar de convertirlo en un método de extensión en HttpWebRequest ... hace que sea más fácil de usar. ;) – jrista

Cuestiones relacionadas