Ладно, я пытаюсь выяснить, как это сделать.
У меня есть готовый API, и все же это никогда не работает.
using (HttpClient client = new HttpClient())
{
if (!path.EndsWith("/")) path = $"{path}/";
string url = config.CreateRequest(client, null, $"{path}{file.Name}");
string sha1 = JFrogLoader.GetSha1Hash(file);
string sha256 = JFrogLoader.GetSha256Hash(file);
string md5 = JFrogLoader.GetMD5Hash(file);
using (Stream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
StreamContent content = new StreamContent(stream);
client.DefaultRequestHeaders.Add("X-Checksum-Deploy", "true");
client.DefaultRequestHeaders.Add("X-Checksum-Sha1", sha1);
client.DefaultRequestHeaders.Add("X-Checksum-Sha256", sha256);
client.DefaultRequestHeaders.Add("X-Checksum", md5);
content.Headers.Add("Content-Type", "application/octet-stream");
HttpResponseMessage message = await client.PutAsync(url, content);
string response = await message.Content.ReadAsStringAsync();
return message.StatusCode == System.Net.HttpStatusCode.Created;
}
}
Дело в том, что если яне используйте ни один из элементов заголовка "X-Checksum-"
, развертывание работает, но когда вы переходите на страницу в Artifactory, она имеет кнопку «Fix Checksum». Так что я решил, что, вероятно, должен предоставить их. Мои методы, которые генерируют контрольные суммы, используют классы "* CryptoServiceProvider" и обрезают окончательный '=' из вычисленной строки хеша. Но каждый раз, когда я добавляю заголовки контрольной суммы, я получаю исключение из нескольких частей для «Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом».
Я пыталсяиспользуя content.Headers
и client.DefaultRequestHeaders
. Я попытался только предоставить SHa1
.
Я попытался назвать md5
X-Checksum-Md5
(которого нет в API, но решил, что это стоило того). Ничего не работает, и я получаю соединение, закрытое хостом.
Есть идеи, как мне решить эту проблему? Заранее спасибо.