bugfix> xamarin.forms > 投稿

HttpWebRequest でAzure Table Storageの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("-", "");
    }