/// <summary> /// Submit a PharmanetMessage to Pharmanet System. /// </summary> /// <param name="request">The PharmanetMessage request containing HL7v2 base 64 payload.</param> /// <returns>A PharmanetMessage response.</returns> public async Task <RequestResult <PharmanetMessageModel> > SubmitRequest(PharmanetMessageModel request) { RequestResult <PharmanetMessageModel> requestResult = new RequestResult <PharmanetMessageModel>(); JsonSerializerOptions options = new JsonSerializerOptions(); options.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping; string jsonOutput = JsonSerializer.Serialize <PharmanetMessageModel>(request, options); using HttpContent content = new StringContent(jsonOutput); try { Uri delegateUri = new Uri(this.pharmanetDelegateConfig.Endpoint); Logger.LogDebug(this.logger, $"PharmanetDelegate Proxy POST {delegateUri}. Payload: {jsonOutput}"); HttpResponseMessage response = await this.httpClient.PostAsync(delegateUri, content).ConfigureAwait(true); requestResult.IsSuccessStatusCode = response.IsSuccessStatusCode; requestResult.StatusCode = response.StatusCode; if (!requestResult.IsSuccessStatusCode) { string msg = "PharmanetDelegate Proxy call returned with StatusCode := " + response.StatusCode; Logger.LogDebug(this.logger, msg); requestResult.ErrorMessage = msg; return(requestResult); } else { string?result = await response.Content.ReadAsStringAsync().ConfigureAwait(true); PharmanetMessageModel?responseMessage = JsonSerializer.Deserialize <PharmanetMessageModel>(result); responseMessage !.Hl7Message = TrimBadCharactersInMessage(responseMessage !.Hl7Message); // Workaround stray chars from Delegate requestResult.Payload = responseMessage; Logger.LogDebug(this.logger, $"PharmanetDelegate Proxy Response: {responseMessage}"); } } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) #pragma warning restore CA1031 // Do not catch general exception types { Logger.LogException(this.logger, $"PharmanetDelegate Exception Occurred.", ex); requestResult.IsSuccessStatusCode = false; requestResult.ErrorMessage = ex.Message; requestResult.StatusCode = System.Net.HttpStatusCode.InternalServerError; return(requestResult); } return(requestResult); }
/// <summary> /// Submit Request to Pharmanet. /// </summary> /// <param name="request">The DocumentReference to be submitted.</param> /// <returns>Returns a DocumentReference containing the response from PharmaNet.</returns> public async Task <RequestResult <DocumentReference> > SubmitRequest(DocumentReference request) { RequestResult <DocumentReference> response = new RequestResult <DocumentReference>(); bool base64Encode = this.configuration.GetSection(PharmanetDelegateConfig.ConfigurationSectionKey).GetValue <bool>("Base64EncodeHl7Message"); PharmanetMessageModel requestMessage = PharmanetDelegateAdapter.ToPharmanetMessageModel(request, base64Encode); try { Logger.LogDebug(this.logger, $"Pharmanet Request: {requestMessage.Hl7Message}"); RequestResult <PharmanetMessageModel> result = await this.pharmanetDelegate.SubmitRequest(requestMessage).ConfigureAwait(true); response.StatusCode = result.StatusCode; response.ErrorMessage = result.ErrorMessage; if (result.IsSuccessStatusCode) { PharmanetMessageModel?message = result.Payload; this.logger.LogDebug($"Pharmanet Response: {message!.Hl7Message}"); ResourceReference reference = PharmanetDelegateAdapter.RelatedToDocumentReference(request); response.Payload = PharmanetDelegateAdapter.ToDocumentReference(message !, reference); this.logger.LogDebug($"FHIR Response: {response!.Payload.ToString()}"); response.IsSuccessStatusCode = true; } else { Logger.LogDebug(this.logger, $"Pharmanet Response Error: {result.ErrorMessage}"); } } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) #pragma warning restore CA1031 // Do not catch general exception types { Logger.LogException(this.logger, "Pharmanet Exception.", ex); response.IsSuccessStatusCode = false; response.StatusCode = System.Net.HttpStatusCode.InternalServerError; response.ErrorMessage = ex.Message; } return(response); }