我试图实现一个API HMAC安全。一切工作正常,直到我试图发布文件。HttpContent.ReadAsByteArrayAsync()没有错误失败里面DelegatingHandler
的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 HttpClient
(HMACHttpClient)实现,以便将HMAC头附加到请求DelegatingHandler
(HMACDelegatingHandler)。
在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
请求永远不会被发送。
任何想法发生了什么?