/// <summary> /// Parses a web exception to get an error message and a <see cref="HttpWebClientServiceExceptionStatus"/> status code. /// </summary> /// <param name="webException">The web exception.</param> /// <param name="url">The URL.</param> /// <param name="proxyHost">The proxy host.</param> /// <param name="status">The status.</param> /// <returns></returns> private static string ParseWebRequestException(WebException webException, Uri url, string proxyHost, out HttpWebClientServiceExceptionStatus status) { StringBuilder messageBuilder = new StringBuilder(); switch (webException.Status) { case WebExceptionStatus.ProtocolError: HttpWebResponse response = (HttpWebResponse)webException.Response; switch (response.StatusCode) { case HttpStatusCode.ProxyAuthenticationRequired: status = HttpWebClientServiceExceptionStatus.ProxyError; messageBuilder.AppendFormat( ExceptionMessages.ProxyAuthenticationFailure, proxyHost, url.Host); break; default: status = HttpWebClientServiceExceptionStatus.ServerError; messageBuilder .AppendFormat(ExceptionMessages.ServerError, url.Host) .Append(response.StatusDescription); break; } break; case WebExceptionStatus.ProxyNameResolutionFailure: status = HttpWebClientServiceExceptionStatus.ProxyError; messageBuilder.AppendFormat(ExceptionMessages.ProxyNameResolutionFailure, proxyHost); break; case WebExceptionStatus.RequestProhibitedByProxy: status = HttpWebClientServiceExceptionStatus.ProxyError; messageBuilder.AppendFormat(ExceptionMessages.RequestProhibitedByProxy, url.Host, proxyHost); break; case WebExceptionStatus.NameResolutionFailure: status = HttpWebClientServiceExceptionStatus.NameResolutionFailure; messageBuilder.AppendFormat(ExceptionMessages.NameResolutionFailure, proxyHost); break; case WebExceptionStatus.ConnectFailure: status = HttpWebClientServiceExceptionStatus.ConnectFailure; messageBuilder.AppendFormat(ExceptionMessages.ConnectFailure, url.Host); break; case WebExceptionStatus.Timeout: status = HttpWebClientServiceExceptionStatus.Timeout; messageBuilder.AppendFormat(ExceptionMessages.Timeout, url.Host); break; default: status = HttpWebClientServiceExceptionStatus.WebException; messageBuilder.AppendFormat(ExceptionMessages.UnknownException, url.Host, webException.Status); break; } return(messageBuilder.ToString()); }
/// <summary> /// Initializes a new instance of the <see cref="HttpWebClientServiceException"/> class. /// </summary> /// <param name="status">The status.</param> /// <param name="ex">The ex.</param> /// <param name="url">The URL.</param> /// <param name="message">The message.</param> private HttpWebClientServiceException(HttpWebClientServiceExceptionStatus status, Exception ex, Uri url, string message) : base(message, ex) { Status = status; Url = url; }
/// <summary> /// Parses an HTTP request exception to get an error message and a <see cref="HttpWebClientServiceExceptionStatus" /> status code. /// </summary> /// <param name="httpRequestException">The HTTP request exception.</param> /// <param name="httpStatusCode">The HTTP status code.</param> /// <param name="url">The URL.</param> /// <param name="proxyHost">The proxy host.</param> /// <param name="status">The status.</param> /// <returns></returns> private static string ParseHttpRequestException(HttpRequestException httpRequestException, HttpStatusCode httpStatusCode, Uri url, string proxyHost, out HttpWebClientServiceExceptionStatus status) { StringBuilder messageBuilder = new StringBuilder(); switch (httpStatusCode) { // Informational case HttpStatusCode.Continue: goto default; case HttpStatusCode.SwitchingProtocols: goto default; // Redirection case HttpStatusCode.MultipleChoices: goto default; case HttpStatusCode.MovedPermanently: goto default; case HttpStatusCode.Redirect: goto default; case HttpStatusCode.RedirectMethod: goto default; case HttpStatusCode.NotModified: goto default; case HttpStatusCode.UseProxy: status = HttpWebClientServiceExceptionStatus.ProxyError; messageBuilder.AppendFormat( ExceptionMessages.ProxyNameResolutionFailure, proxyHost); break; case HttpStatusCode.Unused: goto default; case HttpStatusCode.TemporaryRedirect: goto default; // Client Error case HttpStatusCode.BadRequest: goto default; case HttpStatusCode.Unauthorized: goto default; case HttpStatusCode.PaymentRequired: goto default; case HttpStatusCode.Forbidden: goto default; case HttpStatusCode.NotFound: goto default; case HttpStatusCode.MethodNotAllowed: goto default; case HttpStatusCode.NotAcceptable: goto default; case HttpStatusCode.ProxyAuthenticationRequired: status = HttpWebClientServiceExceptionStatus.ProxyError; messageBuilder.AppendFormat( ExceptionMessages.ProxyAuthenticationFailure, proxyHost, url.Host); break; case HttpStatusCode.RequestTimeout: status = HttpWebClientServiceExceptionStatus.Timeout; messageBuilder.AppendFormat(ExceptionMessages.Timeout, url.Host); break; case HttpStatusCode.Conflict: goto default; case HttpStatusCode.Gone: goto default; case HttpStatusCode.LengthRequired: goto default; case HttpStatusCode.PreconditionFailed: goto default; case HttpStatusCode.RequestEntityTooLarge: goto default; case HttpStatusCode.RequestUriTooLong: goto default; case HttpStatusCode.UnsupportedMediaType: goto default; case HttpStatusCode.RequestedRangeNotSatisfiable: goto default; case HttpStatusCode.ExpectationFailed: goto default; case HttpStatusCode.UpgradeRequired: goto default; // Server Error case HttpStatusCode.InternalServerError: case HttpStatusCode.NotImplemented: case HttpStatusCode.BadGateway: case HttpStatusCode.ServiceUnavailable: case HttpStatusCode.GatewayTimeout: case HttpStatusCode.HttpVersionNotSupported: status = HttpWebClientServiceExceptionStatus.ServerError; messageBuilder .AppendFormat(ExceptionMessages.ServerError, url.Host) .Append($"{(int)httpStatusCode} ({httpStatusCode.ToString().ConvertUpperCamelCaseToString()})"); break; default: status = HttpWebClientServiceExceptionStatus.Exception; messageBuilder.AppendFormat(ExceptionMessages.UnknownException, url.Host, $"{(int)httpStatusCode} ({httpStatusCode.ToString().ConvertUpperCamelCaseToString()})"); break; } return(messageBuilder.ToString()); }
/// <summary> /// Initializes a new instance of the <see cref="HttpWebClientServiceException"/> class. /// </summary> /// <param name="status">The status.</param> /// <param name="ex">The ex.</param> /// <param name="url">The URL.</param> /// <param name="message">The message.</param> private HttpWebClientServiceException(HttpWebClientServiceExceptionStatus status, Exception ex, Uri url, string message) : base(message, ex) { Status = status; Url = url; }
/// <summary> /// Parses an HTTP request exception to get an error message and a <see cref="HttpWebClientServiceExceptionStatus" /> status code. /// </summary> /// <param name="httpRequestException">The HTTP request exception.</param> /// <param name="httpStatusCode">The HTTP status code.</param> /// <param name="url">The URL.</param> /// <param name="proxyHost">The proxy host.</param> /// <param name="status">The status.</param> /// <returns></returns> private static string ParseHttpRequestException(HttpRequestException httpRequestException, HttpStatusCode httpStatusCode, Uri url, string proxyHost, out HttpWebClientServiceExceptionStatus status) { StringBuilder messageBuilder = new StringBuilder(); switch (httpStatusCode) { // Informational case HttpStatusCode.Continue: goto default; case HttpStatusCode.SwitchingProtocols: goto default; // Redirection case HttpStatusCode.MultipleChoices: goto default; case HttpStatusCode.MovedPermanently: goto default; case HttpStatusCode.Redirect: goto default; case HttpStatusCode.RedirectMethod: goto default; case HttpStatusCode.NotModified: goto default; case HttpStatusCode.UseProxy: status = HttpWebClientServiceExceptionStatus.ProxyError; messageBuilder.AppendFormat( ExceptionMessages.ProxyNameResolutionFailure, proxyHost); break; case HttpStatusCode.Unused: goto default; case HttpStatusCode.TemporaryRedirect: goto default; // Client Error case HttpStatusCode.BadRequest: goto default; case HttpStatusCode.Unauthorized: goto default; case HttpStatusCode.PaymentRequired: goto default; case HttpStatusCode.Forbidden: goto default; case HttpStatusCode.NotFound: goto default; case HttpStatusCode.MethodNotAllowed: goto default; case HttpStatusCode.NotAcceptable: goto default; case HttpStatusCode.ProxyAuthenticationRequired: status = HttpWebClientServiceExceptionStatus.ProxyError; messageBuilder.AppendFormat( ExceptionMessages.ProxyAuthenticationFailure, proxyHost, url.Host); break; case HttpStatusCode.RequestTimeout: status = HttpWebClientServiceExceptionStatus.Timeout; messageBuilder.AppendFormat(ExceptionMessages.Timeout, url.Host); break; case HttpStatusCode.Conflict: goto default; case HttpStatusCode.Gone: goto default; case HttpStatusCode.LengthRequired: goto default; case HttpStatusCode.PreconditionFailed: goto default; case HttpStatusCode.RequestEntityTooLarge: goto default; case HttpStatusCode.RequestUriTooLong: goto default; case HttpStatusCode.UnsupportedMediaType: goto default; case HttpStatusCode.RequestedRangeNotSatisfiable: goto default; case HttpStatusCode.ExpectationFailed: goto default; case HttpStatusCode.UpgradeRequired: goto default; // Server Error case HttpStatusCode.InternalServerError: case HttpStatusCode.NotImplemented: case HttpStatusCode.BadGateway: case HttpStatusCode.ServiceUnavailable: case HttpStatusCode.GatewayTimeout: case HttpStatusCode.HttpVersionNotSupported: status = HttpWebClientServiceExceptionStatus.ServerError; messageBuilder .AppendFormat(ExceptionMessages.ServerError, url.Host) .Append($"{(int)httpStatusCode} ({httpStatusCode.ToString().ConvertUpperCamelCaseToString()})"); break; default: status = HttpWebClientServiceExceptionStatus.Exception; messageBuilder.AppendFormat(ExceptionMessages.UnknownException, url.Host, $"{(int)httpStatusCode} ({httpStatusCode.ToString().ConvertUpperCamelCaseToString()})"); break; } return messageBuilder.ToString(); }
/// <summary> /// Parses a web exception to get an error message and a <see cref="HttpWebClientServiceExceptionStatus"/> status code. /// </summary> /// <param name="webException">The web exception.</param> /// <param name="url">The URL.</param> /// <param name="proxyHost">The proxy host.</param> /// <param name="status">The status.</param> /// <returns></returns> private static string ParseWebRequestException(WebException webException, Uri url, string proxyHost, out HttpWebClientServiceExceptionStatus status) { StringBuilder messageBuilder = new StringBuilder(); switch (webException.Status) { case WebExceptionStatus.ProtocolError: HttpWebResponse response = (HttpWebResponse)webException.Response; switch (response.StatusCode) { case HttpStatusCode.ProxyAuthenticationRequired: status = HttpWebClientServiceExceptionStatus.ProxyError; messageBuilder.AppendFormat( ExceptionMessages.ProxyAuthenticationFailure, proxyHost, url.Host); break; default: status = HttpWebClientServiceExceptionStatus.ServerError; messageBuilder .AppendFormat(ExceptionMessages.ServerError, url.Host) .Append(response.StatusDescription); break; } break; case WebExceptionStatus.ProxyNameResolutionFailure: status = HttpWebClientServiceExceptionStatus.ProxyError; messageBuilder.AppendFormat(ExceptionMessages.ProxyNameResolutionFailure, proxyHost); break; case WebExceptionStatus.RequestProhibitedByProxy: status = HttpWebClientServiceExceptionStatus.ProxyError; messageBuilder.AppendFormat(ExceptionMessages.RequestProhibitedByProxy, url.Host, proxyHost); break; case WebExceptionStatus.NameResolutionFailure: status = HttpWebClientServiceExceptionStatus.NameResolutionFailure; messageBuilder.AppendFormat(ExceptionMessages.NameResolutionFailure, proxyHost); break; case WebExceptionStatus.ConnectFailure: status = HttpWebClientServiceExceptionStatus.ConnectFailure; messageBuilder.AppendFormat(ExceptionMessages.ConnectFailure, url.Host); break; case WebExceptionStatus.Timeout: status = HttpWebClientServiceExceptionStatus.Timeout; messageBuilder.AppendFormat(ExceptionMessages.Timeout, url.Host); break; default: status = HttpWebClientServiceExceptionStatus.WebException; messageBuilder.AppendFormat(ExceptionMessages.UnknownException, url.Host, webException.Status); break; } return messageBuilder.ToString(); }