Как правильно установить свойство content.Headers.ContentMD5 с помощью System.Net.Http.HttpClient для хранилища таблиц Azure - PullRequest
0 голосов
/ 25 мая 2018

Я успешно использовал 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("-", "");
    }

1 Ответ

0 голосов
/ 25 мая 2018

После поисков решения в течение многих часов и формулирования этого вопроса я наконец нашел ответ сам:

 content.Headers.ContentMD5 =  Convert.FromBase64String(hashString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...