public async Task <IHttpActionResult> AddDocument([FromBody] DocumentModel document) { if (document == null) { return(BadRequest("Document body required")); } if (document.Data == null) { return(BadRequest("Document data is missing")); } if (string.IsNullOrWhiteSpace(document.FormatCodeName)) { return(BadRequest("Format code name is null or empty")); } if (string.IsNullOrWhiteSpace(document.FormatCode)) { return(BadRequest("Format code is null or empty")); } if (document.ReplaceId != null && document.ReplaceId == string.Empty) { return(BadRequest("Replace ID cannot be empty")); } var queueDocumentData = new QueueDocumentData { CdaPackage = document.Data, DocumentIdToReplace = document.ReplaceId, FormatCode = document.FormatCode, FormatCodeName = document.FormatCodeName }; DocumentEntity documentEntity; try { documentEntity = await _queueManager.AddDocumentToQueue(queueDocumentData); } catch (ArgumentException e) // Thrown when the document to replace is invalid { return(BadRequest(e.Message)); } catch (ValidationException ve) // Thrown when the request is invalid { List <string> errors = ve.Errors.Select(e => e.ErrorMessage).ToList(); return(BadRequest(string.Join(" ", errors))); } catch (SignatureVerificationException sve) // Thrown when the package contents are invalid { return(BadRequest(sve.Message)); } catch (ZipException ze) // Thrown when the zip file is invalid { return(BadRequest(ze.Message)); } DocumentModel createdDocument = MapDocumentEntityToDocument(documentEntity); return(Created(new Uri(createdDocument.DocumentLink), createdDocument)); }