Я успешно использовал REST API для хранения таблиц Azure с HttpWebRequest
.
Теперь я пытаюсь перенести приложение на System.Net.Http.HttpClient Classes.
Для проверки подлинности с помощью sharedKeyВ методе заголовок Content-MD5
был установлен с помощью
content.Headers.Add("Content-MD5", hashString);
. Это работает и в UWP с классами HttpClient, но не работает для iOS (в запросе, перехваченном с помощью Fiddler, значение ContentЗаголовок -MD5 пуст.
В HttpClient теперь есть свойство content.Headers.ContentMD5
, которое будет использоваться.
Однако я не могу установить это свойство так, как Fiddler показывает мнето же значение для заголовка Content-MD5 в решении UWP. Вот мой код:
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("-", "");
}