public ICommandResponse Execute(ICommand command) { var request = command.Prepare(); try { var webResponse = (HttpWebResponse)request.GetResponse(); return(command.ParseResponse(webResponse)); } catch (WebException ex) { var exception = new NinefoldApiException(ex); if (ex.Response.ContentLength > 0) { var responseStream = ex.Response.GetResponseStream(); if ((responseStream != null) && (responseStream.CanRead)) { var contentDocument = XDocument.Load(responseStream); if (contentDocument.Root != null) { var message = contentDocument.Root.Elements().FirstOrDefault(e => e.Name.LocalName.Equals("message", StringComparison.InvariantCultureIgnoreCase)); var code = contentDocument.Root.Elements().FirstOrDefault(e => e.Name.LocalName.Equals("code", StringComparison.InvariantCultureIgnoreCase)); exception.ErrorMessage = message == null ? string.Empty : message.Value; exception.Code = code == null ? string.Empty : code.Value; } } } throw exception; } }
public void DeleteUserMetadata_ShouldReturnNinefoldExceptionWithMessage_OnBrokenRequest() { NinefoldApiException apiException = null; try { _storageClient.DeleteUserMetadata(new DeleteUserMetadataRequest { Resource = new Uri("someId", UriKind.Relative), Tags = "22" }); } catch (NinefoldApiException ex) { apiException = ex; Assert.IsFalse(string.IsNullOrWhiteSpace(ex.Message), "No custom exception message was returned"); Assert.IsFalse(string.IsNullOrWhiteSpace(ex.Code), "No custom exception code was returned"); } Assert.IsNotNull(apiException, "No api exception was caught"); }