如何以编程方式测试 .NET Core 中的 CDN 完整性?

How do I programmatically test CDN integrity in .NET Core?

任务

我想弄清楚如何在 ASP.NET Core 2.1 中创建一个散列,它等于 html <script> 元素的 integrity attribute 中的散列字符串:

    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" 
            integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" 
            crossorigin="anonymous"></script>

代码

这是我目前拥有的:

[Fact(DisplayName = "jQuery integrity")]
public async Task jQuery()
{
    var result = await this.Client.GetAsync("https://code.jquery.com/jquery-3.3.1.slim.min.js");
    byte[] content = Encoding.UTF8.GetBytes(await result.Content.ReadAsStringAsync());
    byte[] hash = SHA384.Create().ComputeHash(content);

    Assert.Equal(
        expected: "q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo",
        actual: Convert.ToBase64String(hash));
}

但是 Assert.Equals 失败了:

Expected: q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smX···

Actual: w4/2hcGpax1pNE5nZ3cA34ExOY5Yr14zrL0DQdd7x···

问题

我到底需要哈希什么?如何检索正确的哈希字符串,以便将其与 HTML 中使用的字符串进行比较?提前致谢:)

PS:如果你问自己为什么我要完成这个:只是出于好奇。我主要想检查 CDN 是否存在,因此如果它不可用,我的构建过程会自动抛出错误。是的,我使用了 <script> 元素的后备功能,但这就是我担心我不会注意到 CDN 缺失的原因。

我能够通过使用 new HttpClient() 而不是解决问题 之前按照 MSDN 文档和第 9 频道教程中的建议创建 HttpClient via injecting the WebApplicationFactory<TEntryPoint> into my test class and calling CreateClient

但是,很高兴知道为什么这两个 HttpClient 实例表现不同?