Te damos la bienvenida a nuestro sitio, en este lugar vas a hallar la solucíon a lo que buscabas.
Solución:
¿Es esto posible usando HttpWebRequest y HttpWebResponse?
Puede hacer que su servidor web simplemente atrape y escriba el texto de la excepción en el cuerpo de la respuesta, luego establezca el código de estado en 500. Ahora el cliente generaría una excepción cuando encuentre un error 500, pero podría leer el flujo de respuesta y obtener el mensaje de la excepción.
Por lo tanto, podría capturar una WebException, que es lo que se lanzará si no es 200 código de estado es devuelto por el servidor y lee su cuerpo:
catch (WebException ex)
using (var stream = ex.Response.GetResponseStream())
using (var reader = new StreamReader(stream))
Console.WriteLine(reader.ReadToEnd());
catch (Exception ex)
// Something more serious happened
// like for example you don't have network access
// we cannot talk about a server exception here as
// the server probably was never reached
Encontré esta pregunta cuando intentaba verificar si existía un archivo en un sitio FTP o no. Si el archivo no existe, habrá un error al intentar verificar su marca de tiempo. Pero quiero asegurarme de que el error no sea otra cosa, comprobando su tipo.
los Response
propiedad en WebException
será de tipo FtpWebResponse
en el que puedes comprobar su StatusCode
propiedad para ver qué error de FTP tiene.
Aquí está el código con el que terminé:
public static bool FileExists(string host, string username, string password, string filename)
// create FTP request
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + host + "/" + filename);
request.Credentials = new NetworkCredential(username, password);
// we want to get date stamp - to see if the file exists
request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
try
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
var lastModified = response.LastModified;
// if we get the last modified date then the file exists
return true;
catch (WebException ex)
var ftpResponse = (FtpWebResponse)ex.Response;
// if the status code is 'file unavailable' then the file doesn't exist
// may be different depending upon FTP server software
if (ftpResponse.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
return false;
// some other error - like maybe internet is down
throw;
Me enfrenté a una situación similar:
Estaba tratando de leer la respuesta sin procesar en caso de un error HTTP que consumía un servicio SOAP, usando BasicHTTPBinding.
Sin embargo, al leer la respuesta usando GetResponseStream()
obtuve el error:
Transmisión no legible
Entonces, este código funcionó para mí:
try
response = basicHTTPBindingClient.CallOperation(request);
catch (ProtocolException exception)
var webException = exception.InnerException as WebException;
var rawResponse = string.Empty;
var alreadyClosedStream = webException.Response.GetResponseStream() as MemoryStream;
using (var brandNewStream = new MemoryStream(alreadyClosedStream.ToArray()))
using (var reader = new StreamReader(brandNewStream))
rawResponse = reader.ReadToEnd();
Recuerda que puedes optar por la opción de aclarar si te fue de ayuda.