如何正确设置内容.Headers.ContentMD5 属性,使用 System.Net.Http.HttpClient



我成功地使用了 Azure 表HttpWebRequest存储的 REST API。

现在我正在尝试将应用程序移植到System.Net.Http.HttpClient Classes.

对于使用 sharedKey 方法进行身份验证,Content-MD5标头是使用

content.Headers.Add("Content-MD5", hashString);

这也适用于带有 HttpClient 类的 UWP,但它不适用于 iOS(在 Fiddler 捕获的请求中,Content-MD5 标头的值为空。

在 HttpClient 中,现在有一个应使用的content.Headers.ContentMD5属性。

但是,我无法以 Fiddler 向我显示 UWP 解决方案中 Content-MD5 标头的相同值的方式设置此属性。 这是我的代码:

string contentString = "<some xml content>";
// alternative hash function working on all platforms
// byte[] hash = xBrainLab.Security.Cryptography.MD5.GetHash  (contentString);
// string hashString = xBrainLab.Security.Cryptography.MD5.GetHashString(contentString);
System.Security.Cryptography.MD5CryptoServiceProvider csp = new MD5CryptoServiceProvider();
var hash = csp.ComputeHash(Encoding.UTF8.GetBytes(contentString));
var hashString = ByteArrayToString(hash);  // is "AABB88AFD4056C0B8E4FEB6B433D5EE9"
System.Net.Http.HttpClient client = new HttpClient();
Uri uri = new Uri("http://woschmi01.table.core.windows.net/Test2018()");
HttpRequestMessage requestMessage = new HttpRequestMessage(new HttpMethod("PUT"), uri);
var content = new StringContent(contentString);
// former solution, works on UWP but not on iOS
content.Headers.Add("Content-MD5", hashString);
// solution I'm trying to get working:
// content.Headers.ContentMD5 = hash;                // What has to be taken as content.Headers.ContentMD5 property   ?????

var response = SendRequest(client, uri, content);

for ( int i = 0; i < 5; i++)
{
Thread.Sleep(1000);
}
//****************************************
async Task<HttpResponseMessage> SendRequest(HttpClient client, Uri uri,    StringContent content)
{
HttpResponseMessage response =  await client.PostAsync(uri, content);
return response;}
//**************************************       
static string ByteArrayToString(byte[] ba)
{
return BitConverter.ToString(ba).Replace("-", "");
}

在搜索了几个小时的解决方案并提出这个问题之后,我终于自己找到了答案:

content.Headers.ContentMD5 =  Convert.FromBase64String(hashString);

相关内容

  • 没有找到相关文章

最新更新