如何使用 System.Net.Http.HttpClient 为 Azure 表存储正确设置 content.Headers.ContentMD5 属性
Posted
技术标签:
【中文标题】如何使用 System.Net.Http.HttpClient 为 Azure 表存储正确设置 content.Headers.ContentMD5 属性【英文标题】:How to properly set content.Headers.ContentMD5 property using System.Net.Http.HttpClient for Azure Table Storage 【发布时间】:2018-05-25 11:21:41 【问题描述】:我成功地使用 HttpWebRequest
的 Azure 表存储 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("-", "");
【问题讨论】:
【参考方案1】:在寻找解决方案数小时并提出这个问题后,我终于自己找到了答案:
content.Headers.ContentMD5 = Convert.FromBase64String(hashString);
【讨论】:
以上是关于如何使用 System.Net.Http.HttpClient 为 Azure 表存储正确设置 content.Headers.ContentMD5 属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]