在.net核心中使用StreamContent在PostAsync期间计算SHA1

时间:2018-10-30 16:15:43

标签: c# .net-core sha1

我想用一个大文件发出HTTP POST请求,因此我在.net核心上编写了C#代码,如下所示:

using (var fileStream = new FileStream(filePath, FileMode.Open))
using (var streamContent = new StreamContent(fileStream))
{
    var content = new MultipartFormDataContent();
    content.Add(streamContent);
    resp = await httpClient.PostAsync(requestUri, content);
}

对我来说效果很好。但是,我发现,如果可以在此上下文中计算SHA1,然后将其用于POST结果的简单缓存,可能会很高兴。

我在SO上找到了一些答案,如下所示:

How do I do a SHA1 File Checksum in C#?

但是,我不知道如何在代码中使用它。

这是我到目前为止尝试过的:

byte[] hash = null;

using (SHA1Managed shaForStream = new SHA1Managed())
using (var fs = new FileStream(filePath, FileMode.Open))
using (var streamContent = new StreamContent(fs))
{
    var content = new MultipartFormDataContent();
    content.Add(streamContent);
    resp = await httpClient.PostAsync(requestUri, content);
    hash = shaForStream.ComputeHash(fs);
}

它不起作用。例如,不同文件的sha1值相同。

我认为我可能需要进一步研究Stream。您能告诉我该问题需要学习哪些材料吗?

p.s,有两种方法可以缓存请求和响应,即请求参数和响应,但是我想用SHA1方式进行测试。我只是很好奇我如何才能计算出一些内容并仅用一个流请求POST。我可以通过创建两个文件流来做到这一点。 :)

0 个答案:

没有答案