クライアントが受信したときにサーバーからバイト配列を返すのは異なります

アンドリューシンプソン

WebAPIからバイト配列を呼び出そう(取得)しようとしているRESTAPIがあります。これは私のクライアントコードです:

Uri uri = new Uri(URL);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/Binary"));
HttpResponseMessage response = await httpClient.GetAsync(uri + route + "?" + COMPANY_REF + "=" + ApplicationObject.CompanyRef);
response.EnsureSuccessStatusCode();
var result = response.Content.ReadAsByteArrayAsync().Result

これは私のサーバーAPIです:

[HttpGet]
public byte[] Get(Guid companyRef)
{
    Mapper.CreateMap<Services.Group,Models.Group>();
    var test = Mapper.Map<List<Models.Group>>(groupRepository.Get(companyRef));
    var t = Compression.Serialize(test);
    return t;
}


public static byte[] Serialize(this Object obj)
{
    if (obj == null)
    {
        return null;
    }

    using (var memoryStream = new MemoryStream())
    {
        var binaryFormatter = new BinaryFormatter();
        binaryFormatter.Serialize(memoryStream, obj);
        var compressed = Compression.Zip(memoryStream.ToArray());

        return compressed;
    }
}

サーバーから返されるバイト配列は次のとおりです。

ここに画像の説明を入力してください

クライアントが受信するバイト配列は次のとおりです。

ここに画像の説明を入力してください

ご覧のとおり、サイズと値が間違っています。

私はこれが現在設定されているメディアヘッダーにあると仮定しています:

httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/Binary"));

Fiddlerを使用すると、Jsonを期待しているように見えます。だから私はそれを「Application / json」に変更しました

それはうまくいきませんでした。

base64Binaryも使用しましたが、それも機能しませんでした。

他に何を試すことができますか?

追加:ブラウザに直接apiを入力した場合の結果:

<base64Binary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
H4sIAAAAAAAEAKWS32vUQBDHN3u5TXJRUSr1B4pBX49g/4CDlhb64K9Dq304jjWXTK/rbXePbCKc4N8qCIIgCILvOnO92KDNkxP2m2SYz8zszjKPMfYLjd5kVzjK7jHMxrasMj1M3kDplDWjnfQxPcNkv9ZVXcLIQF2VFDGuZ1rlT2B1ZBdgRqbW2qd0H1+tXAVn6b7VGvIKk7j0EAyUKk+fKle93ZlM/hRKn9kCNAaUtl4Ok/9tYDrtYQdCKmzA9aVTHyCU788z+YzdvrzuZEq7D8OI4BBXhCugH+ZtPP725SiBkU/SJxEkAck6DeWJBiQxSp/iOvKsK6+/XsKJ/zw7g/gAXF6qJR1gz/Pizake1qqgov5PnF7bSRW4zLiccZlzWXAJXJ5wOefylEvF5TsuF+zCwiDgG2N/mbiKEh/ZIlu55NiWC3GNvOfFPNoo7cT7gR1QF//g11F6e1qLGy1MNNj3LmwLZfDaZM6puYFC3GzRQUN/66K3KeLFEoy41eLChvvaxd2hWY/BFMrMxd0WGjXoly70HqF7M5wmdnu/hQ4a9HMX+oAiDqwBkbS4uOE+dXEPKcLg9RCPaEbFxR2JfwNB64eo1AMAAA==
</base64Binary>

より詳しい情報:

これを変更する場合:

 var result = response.Content.ReadAsByteArrayAsync().Result;
    byte[] resultFromServer = Encoding.ASCII.GetBytes("H4sIAAAAAAAEAKWS32vUQBDHN3u5TXJRUSr1B4pBX49g/4CDlhb64K9Dq304jjWXTK/rbXePbCKc4N8qCIIgCILvOnO92KDNkxP2m2SYz8zszjKPMfYLjd5kVzjK7jHMxrasMj1M3kDplDWjnfQxPcNkv9ZVXcLIQF2VFDGuZ1rlT2B1ZBdgRqbW2qd0H1+tXAVn6b7VGvIKk7j0EAyUKk+fKle93ZlM/hRKn9kCNAaUtl4Ok/9tYDrtYQdCKmzA9aVTHyCU788z+YzdvrzuZEq7D8OI4BBXhCugH+ZtPP725SiBkU/SJxEkAck6DeWJBiQxSp/iOvKsK6+/XsKJ/zw7g/gAXF6qJR1gz/Pizake1qqgov5PnF7bSRW4zLiccZlzWXAJXJ5wOefylEvF5TsuF+zCwiDgG2N/mbiKEh/ZIlu55NiWC3GNvOfFPNoo7cT7gR1QF//g11F6e1qLGy1MNNj3LmwLZfDaZM6puYFC3GzRQUN/66K3KeLFEoy41eLChvvaxd2hWY/BFMrMxd0WGjXoly70HqF7M5wmdnu/hQ4a9HMX+oAiDqwBkbS4uOE+dXEPKcLg9RCPaEbFxR2JfwNB64eo1AMAAA==");
    byte[] actualBytes = Convert.FromBase64String(Encoding.ASCII.GetString(resultFromServer));

これに:

var result = response.Content.ReadAsStringAsync().Result;
byte[] resultFromServer = Encoding.ASCII.GetBytes(result);
byte[] actualBytes = Convert.FromBase64String(Encoding.ASCII.GetString(resultFromServer));

エラーが発生します:

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

This is the value of result

"H4sIAAAAAAAEAKWS32vUQBDHN3u5TXJRUSr1B4pBX49g/4CDlhb64K9Dq304jjWXTK/rbXePb CKc4N8qCIIgCILvOnO92KDNkxP2m2SYz8zszjKPMfYLjd5kVzjK7jHMxrasMj1M3kDplDWjnfQ xPcNkv9ZVXcLIQF2VFDGuZ1rlT2B1ZBdgRqbW2qd0H1+tXAVn6b7VGvIKk7j0EAyUKk +fKle93ZlM/hRKn9kCNAaUtl4Ok/9tYDrtYQdCKmzA9aVTHyCU788z +YzdvrzuZEq7D8OI4BBXhCugH +ZtPP725SiBkU/SJxEkAck6DeWJBiQxSp/iOvKsK6+/XsKJ/zw7g/gAXF6qJR1gz/Pizake1qq gov5PnF7bSRW4zLiccZlzWXAJXJ5wOefylEvF5TsuF +zCwiDgG2N/mbiKEh/ZIlu55NiWC3GNvOfFPNoo7cT7gR1QF//g11F6e1qLGy1MNNj3LmwLZfD aZM6puYFC3GzRQUN/66K3KeLFEoy41eLChvvaxd2hWY/BFMrMxd0WGjXoly70HqF7M5wmdnu/h Q4a9HMX+oAiDqwBkbS4uOE+dXEPKcLg9RCPaEbFxR2JfwNB64eo1AMAAA=="

From Debug.Write:

「H4sIAAAAAAAEAKWS32vUQBDHN3u5TXJRUSr1B4pBX49g / 4CDlhb64K9Dq304jjWXTK / rbXePbCKc4N8qCIIgCILvOnO92KDNkxP2m2SYz8zszjKPMfYLjd5kVzjK7jHMxrasMj1M3kDplDWjnfQxPcNkv9ZVXcLIQF2VFDGuZ1rlT2B1ZBdgRqbW2qd0H1 + tXAVn6b7VGvIKk7j0EAyUKk + fKle93ZlM / hRKn9kCNAaUtl4Ok / 9tYDrtYQdCKmzA9aVTHyCU788z + YzdvrzuZEq7D8OI4BBXhCugH + ZtPP725SiBkU / SJxEkAck6DeWJBiQxSp / iOvKsK6 + / XsKJ / zw7g / gAXF6qJR1gz / Pizake1qqgov5PnF7bSRW4zLiccZlzWXAJXJ5wOefylEvF5TsuF + zCwiDgG2N / mbiKEh / ZIlu55NiWC3GNvOfFPNoo7cT7gR1QF // g11F6e1qLGy1MNNj3LmwLZfDaZM6puYFC3GzRQUN / 66K3KeLFEoy41eLChvvaxd2hWY / BFMrMxd0WGjXoly70HqF7M5wmdnu / hQ4a9HMX + oAiDqwBkbS4uOE + dXEPKcLg9RCPaEbFxR2JfwNB64eo1AMAAA = = "

これを最終的に機能させるために、私はこれをしなければなりませんでした:

byte[] actualBytes = Convert.FromBase64String(result2.Replace("\"",""));

ありがとう

Oguz Ozgul

応答を文字列として取得しているので、そのBase64文字列をデコードするだけです。

var result = response.Content.ReadAsStringAsync().Result;
byte[] actualBytes = Convert.FromBase64String(result);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

gRPC Javaサーバー:クライアントから受信した元のメッセージバイトを取得する方法はありますか?

分類Dev

クライアントは、受信したのと同じJWTトークンを使用してサーバーにコールバックしますか?

分類Dev

サーバーが送信したものとは異なるオブジェクトを受信するソケットIOクライアント

分類Dev

Androidクライアントがwinsockc ++サーバーから文字列メッセージを受信できないのはなぜですか?

分類Dev

サーバーソケットがクライアントから送信されたパケットを受信しないのはなぜですか

分類Dev

サーバーがクライアントからシードしたよりも多くのデータを受信するのは奇妙です

分類Dev

NodeJSサーバーのクライアントから受信したデータを印刷します

分類Dev

クライアントからSYNを受信した直後にサーバーがSYN / ACKを送信する

分類Dev

Java RMIには、クライアント自体からのクライアント変数とサーバーからのリモート呼び出しからのクライアント変数のインスタンス化が異なります。

分類Dev

サーバーはすべてのデータを受信しましたが、HttpSendRequestはクライアントでFALSE12002を返します

分類Dev

1つのパケット文字列を受信したときにサーバーがクライアントを切断しましたが、別のパケット文字列は受信していません

分類Dev

C#TCPサーバーは、Pythonクライアントから送信された2つのメッセージを同時に受信します

分類Dev

PeekNamedPipeは、サーバーからハンドルが与えられたときに使用可能な正しいバイト数を与えることができず、ハンドルがクライアントから来た場合にのみ機能します

分類Dev

Nettyサーバーが書き込みを行うときに、クライアントが受信したメッセージが故障している可能性はありますか?

分類Dev

クライアントがhttp応答を受信することは可能ですが、サーバーはそれを受信したかどうか確信がありませんか?

分類Dev

クライアントがサーバーからメッセージを受信したことを確認します

分類Dev

TCPサーバーがAndroidのクライアントからデータを受信しないのはなぜですか?

分類Dev

Cのechoclient-server-異なるクライアントから文字列を取得するオープンサーバーがあります-新しい反復で古いchar []を置き換えるにはどうすればよいですか

分類Dev

サーバーがクライアント要求を実行した後、サーバーから確認メッセージを受信しようとすると、クライアントがハングします

分類Dev

受信しているオブジェクトを表すパラメーターのタイプが宣言されている間に、サーバーから受信したJSON文字列を手動で解析する必要がありますか?

分類Dev

Python:クライアントサーバー通信-同じサーバーポート上の異なるクライアントから同時にメッセージを受信する方法は?

分類Dev

JavaScriptクライアントから受信したトークンを使用して、サーバー上にソーシャル接続を作成します

分類Dev

クライアントサーバーPython:受信したメッセージを個別に印刷することはできません

分類Dev

C#クライアントからサーバーへのデータ転送サーバーは以前のクライアントメッセージを受信しています非同期サーバー-非同期クライアント

分類Dev

TCP:サーバーは、クライアントから[SYN]を受信した直後に[RST、ACK]を送信します

分類Dev

サーバーが接続を閉じた後、サーバーはどのようにしてクライアントにデータを送り返すことができますか?

分類Dev

Javaソケット:クライアントがサーバーからメッセージを受信できるかどうかを確認します

分類Dev

nettyクライアントはサーバーから1つの応答しか受信できません

分類Dev

Pythonサーバーは、接続された最初のクライアントからだけでなく、接続されたすべてのクライアントから受信を取得します

Related 関連記事

  1. 1

    gRPC Javaサーバー:クライアントから受信した元のメッセージバイトを取得する方法はありますか?

  2. 2

    クライアントは、受信したのと同じJWTトークンを使用してサーバーにコールバックしますか?

  3. 3

    サーバーが送信したものとは異なるオブジェクトを受信するソケットIOクライアント

  4. 4

    Androidクライアントがwinsockc ++サーバーから文字列メッセージを受信できないのはなぜですか?

  5. 5

    サーバーソケットがクライアントから送信されたパケットを受信しないのはなぜですか

  6. 6

    サーバーがクライアントからシードしたよりも多くのデータを受信するのは奇妙です

  7. 7

    NodeJSサーバーのクライアントから受信したデータを印刷します

  8. 8

    クライアントからSYNを受信した直後にサーバーがSYN / ACKを送信する

  9. 9

    Java RMIには、クライアント自体からのクライアント変数とサーバーからのリモート呼び出しからのクライアント変数のインスタンス化が異なります。

  10. 10

    サーバーはすべてのデータを受信しましたが、HttpSendRequestはクライアントでFALSE12002を返します

  11. 11

    1つのパケット文字列を受信したときにサーバーがクライアントを切断しましたが、別のパケット文字列は受信していません

  12. 12

    C#TCPサーバーは、Pythonクライアントから送信された2つのメッセージを同時に受信します

  13. 13

    PeekNamedPipeは、サーバーからハンドルが与えられたときに使用可能な正しいバイト数を与えることができず、ハンドルがクライアントから来た場合にのみ機能します

  14. 14

    Nettyサーバーが書き込みを行うときに、クライアントが受信したメッセージが故障している可能性はありますか?

  15. 15

    クライアントがhttp応答を受信することは可能ですが、サーバーはそれを受信したかどうか確信がありませんか?

  16. 16

    クライアントがサーバーからメッセージを受信したことを確認します

  17. 17

    TCPサーバーがAndroidのクライアントからデータを受信しないのはなぜですか?

  18. 18

    Cのechoclient-server-異なるクライアントから文字列を取得するオープンサーバーがあります-新しい反復で古いchar []を置き換えるにはどうすればよいですか

  19. 19

    サーバーがクライアント要求を実行した後、サーバーから確認メッセージを受信しようとすると、クライアントがハングします

  20. 20

    受信しているオブジェクトを表すパラメーターのタイプが宣言されている間に、サーバーから受信したJSON文字列を手動で解析する必要がありますか?

  21. 21

    Python:クライアントサーバー通信-同じサーバーポート上の異なるクライアントから同時にメッセージを受信する方法は?

  22. 22

    JavaScriptクライアントから受信したトークンを使用して、サーバー上にソーシャル接続を作成します

  23. 23

    クライアントサーバーPython:受信したメッセージを個別に印刷することはできません

  24. 24

    C#クライアントからサーバーへのデータ転送サーバーは以前のクライアントメッセージを受信しています非同期サーバー-非同期クライアント

  25. 25

    TCP:サーバーは、クライアントから[SYN]を受信した直後に[RST、ACK]を送信します

  26. 26

    サーバーが接続を閉じた後、サーバーはどのようにしてクライアントにデータを送り返すことができますか?

  27. 27

    Javaソケット:クライアントがサーバーからメッセージを受信できるかどうかを確認します

  28. 28

    nettyクライアントはサーバーから1つの応答しか受信できません

  29. 29

    Pythonサーバーは、接続された最初のクライアントからだけでなく、接続されたすべてのクライアントから受信を取得します

ホットタグ

アーカイブ