Bug in yml dotnet tool PackageReference arrangement RDS Blank Change int dotnet test nuget ^ [spcepiworld].[dbo].[evnt_inf] Assembly Version WS Result bug fix and Nuget bump, PSN, Reactor and Extra RDS rule OpenInsightApi and testRunTitle editorconfig bugs Fix Type serializerValue RDS oversight PropertyNameCaseInsensitive Save check for file already present NoWaitDirectory MoveArchive allow empty directory and continueOnError for clean files CreatePointerFile and more on NoWaitDirectory
123 lines
5.3 KiB
C#
123 lines
5.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Net.Http;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
|
|
namespace Adaptation.Shared.Metrology;
|
|
|
|
public partial class WS
|
|
{
|
|
|
|
public static (string, Results) SendData(string url, object payload, int timeoutSeconds = 120)
|
|
{
|
|
Results results = new();
|
|
string resultsJson = string.Empty;
|
|
try
|
|
{
|
|
string json = JsonSerializer.Serialize(payload, payload.GetType());
|
|
if (string.IsNullOrEmpty(url) || !url.Contains(":") || !url.Contains("."))
|
|
throw new Exception("Invalid URL");
|
|
using (HttpClient httpClient = new())
|
|
{
|
|
httpClient.Timeout = new TimeSpan(0, 0, 0, timeoutSeconds, 0);
|
|
HttpRequestMessage httpRequestMessage = new()
|
|
{
|
|
RequestUri = new Uri(url),
|
|
Method = HttpMethod.Post,
|
|
Content = new StringContent(json, Encoding.UTF8, "application/json")
|
|
};
|
|
HttpResponseMessage httpResponseMessage = httpClient.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead).Result;
|
|
resultsJson = httpResponseMessage.Content.ReadAsStringAsync().Result;
|
|
results = JsonSerializer.Deserialize<Results>(resultsJson, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
|
|
}
|
|
if (!results.Success)
|
|
results.Errors.Add(results.ToString());
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Exception exception = e;
|
|
StringBuilder stringBuilder = new();
|
|
while (exception is not null)
|
|
{
|
|
_ = stringBuilder.AppendLine(exception.Message);
|
|
exception = exception.InnerException;
|
|
}
|
|
results.Errors ??= new List<string>();
|
|
results.Errors.Add(resultsJson);
|
|
results.Errors.Add(stringBuilder.ToString());
|
|
}
|
|
return new(resultsJson, results);
|
|
}
|
|
|
|
// this method is a wrapper for attaching a file to either a header or data record
|
|
// URL is the same URL used for SendData, ex: http://localhost/api/inbound/CDE
|
|
// attachToHeaderId is the ID returned by SendData
|
|
// attachToDataUniqueId is the string unique ID for the data record, aka the Title of the Sharepoint list entry
|
|
// fileContents is a byte array with the contents of the file
|
|
// fileName is which attachment this is, image.pdf, data.pdf, data.txt, header.pdf, etc
|
|
// timeoutSeconds is configured as the request timeout
|
|
// this method will either succeed or throw an exception
|
|
// also, this has been made synchronous
|
|
public static void AttachFile(string url, long attachToHeaderId, string attachToDataUniqueId, byte[] fileContents, string fileName, int timeoutSeconds = 60)
|
|
{
|
|
using HttpClient httpClient = new();
|
|
string requestUrl = url + "/attachment?headerid=" + attachToHeaderId.ToString();
|
|
if (!string.IsNullOrWhiteSpace(attachToDataUniqueId))
|
|
{
|
|
requestUrl += "&datauniqueid=";
|
|
requestUrl += System.Net.WebUtility.UrlEncode(attachToDataUniqueId);
|
|
}
|
|
requestUrl += "&filename="; // this is just so the web server log shows the filename
|
|
requestUrl += System.Net.WebUtility.UrlEncode(fileName);
|
|
|
|
httpClient.Timeout = new TimeSpan(0, 0, 0, timeoutSeconds, 0);
|
|
|
|
MultipartFormDataContent multipartFormDataContent = new();
|
|
ByteArrayContent byteArrayContent = new(fileContents);
|
|
byteArrayContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
|
|
|
|
multipartFormDataContent.Add(byteArrayContent, "attachment", fileName);
|
|
|
|
HttpResponseMessage httpResponseMessage = httpClient.PostAsync(requestUrl, multipartFormDataContent).Result;
|
|
|
|
if (httpResponseMessage.IsSuccessStatusCode)
|
|
return;
|
|
|
|
string resultBody = httpResponseMessage.Content.ReadAsStringAsync().Result;
|
|
|
|
throw new Exception("Attachment failed: " + resultBody);
|
|
}
|
|
|
|
public static void AttachFiles(string url, long headerID, List<Attachment> headerAttachments = null, List<Attachment> dataAttachments = null)
|
|
{
|
|
try
|
|
{
|
|
if (headerAttachments is not null)
|
|
{
|
|
foreach (Attachment attachment in headerAttachments)
|
|
AttachFile(url, headerID, "", File.ReadAllBytes(attachment.SourceFileName), attachment.DestinationFileName);
|
|
}
|
|
if (dataAttachments is not null)
|
|
{
|
|
foreach (Attachment attachment in dataAttachments)
|
|
AttachFile(url, headerID, attachment.UniqueId, File.ReadAllBytes(attachment.SourceFileName), attachment.DestinationFileName);
|
|
}
|
|
//MessageBox.Show(r.ToString());
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Exception exception = e;
|
|
StringBuilder stringBuilder = new();
|
|
while (exception is not null)
|
|
{
|
|
_ = stringBuilder.AppendLine(exception.Message);
|
|
exception = exception.InnerException;
|
|
}
|
|
//MessageBox.Show(msgs.ToString(), "Exception", //MessageBoxButtons.OK, //MessageBoxIcon.Error);
|
|
throw new Exception(stringBuilder.ToString());
|
|
}
|
|
}
|
|
|
|
} |