在DelegatingHandler中,HttpContent.ReadAsByteArrayAsync()在没有错误的情况下失败

时间:2016-08-11 19:49:27

标签: c# httprequest hmac

我正在尝试为API实施HMAC安全性。一切正常,直到我尝试发布文件。

HMAC解决方案可以在这里找到 - https://github.com/gavinharriss/WebAPI.HMAC - 它是原始的一个分支,允许GET请求和POST请求。

附加文件的代码:

var requestContent = new MultipartFormDataContent();
var fileContent = new ByteArrayContent(file);
requestContent.Add(fileContent, "file", filename);

如果我立即调用HttpContent.ReadAsByteArrayAsync()没有问题,则字节数组可用。

但是,HMAC HttpClientHMACHttpClient)实现了DelegatingHandlerHMACDelegatingHandler),以便将HMAC标头附加到请求中。

HMACDelegatingHandler中,请求作为HttpRequestMessage传递,其中HttpRequestMessage.Content属性在帮助程序中用于构建HMAC签名。

构建签名时,将从helper class

调用以下代码
private static async Task<byte[]> ComputeHash(HttpContent httpContent)
{
    using (var md5 = MD5.Create())
    {
        byte[] hash = null;
        if (httpContent != null)
        {
            var content = await httpContent.ReadAsByteArrayAsync(); // <-- Fails here
            if (content.Length != 0)
            {
                hash = md5.ComputeHash(content);
            }
        }
        return hash;
    }
}

当单步执行代码时,var content = await httpContent.ReadAsByteArrayAsync()行被击中,然后没有,没有错误。这些请求似乎变得很糟糕,但一切仍在运行,HttpClient请求永远不会被发送。

任何想法会发生什么?

0 个答案:

没有答案