【发布时间】:2019-10-17 02:53:06
【问题描述】:
好的,
好吧,我正在尝试弄清楚如何做到这一点。
我已经准备好了 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 中的页面时,它有“修复校验和”按钮。所以我想我应该提供它们。
我生成校验和的方法使用“*CryptoServiceProvider”类,并从计算的哈希字符串中修剪最终的“=”。但是每次我添加校验和标头时,都会出现“无法从传输连接读取数据:现有连接被远程主机强制关闭”的多部分异常。
我尝试过使用content.Headers 和client.DefaultRequestHeaders。
我试过只提供SHa1。
我试过命名md5X-Checksum-Md5(不在api中,但认为值得一试)。
没有任何效果,我的连接被主机关闭。
任何想法我应该如何解决这个问题? 提前致谢。
【问题讨论】:
标签: c# .net httpclient artifactory checksum