2

OK、問題は、base64 としてエンコードされた HTTP 経由でバイト配列を送信しようとしていることです。相手側で受け取る文字列は元の文字列と同じサイズですが、文字列自体は同一ではないため、文字列を元のバイト配列にデコードできません。

また、文字列を送信する前にクライアント側で base64 との間の変換を行ったところ、すべて正常に動作しました。問題が発生するのは送信された後です。

足りないものはありますか?特定のフォーマットの種類はありますか? EscapeData() を使用してみましたが、文字列が大きすぎます。

前もって感謝します

編集:コード

System.Net.WebRequest rq = System.Net.WebRequest.Create("http://localhost:53399/TestSite/Default.aspx");
rq.Method = "POST";
rq.ContentType = "application/x-www-form-urlencoded";
string request = string.Empty;
string image =             Convert.ToBase64String(System.IO.File.ReadAllBytes("c:\\temp.png"));            
request += "image=" + image;
int length = image.Length;
byte[] array = new UTF8Encoding().GetBytes(request);
rq.ContentLength = request.Length;
System.IO.Stream str = rq.GetRequestStream();                        
str.Write(array, 0, array.Length);            
System.Net.WebResponse rs = rq.GetResponse();
System.IO.StreamReader reader = new System.IO.StreamReader(rs.GetResponseStream());
string response = reader.ReadToEnd();
reader.Close();
str.Close();            
System.IO.File.WriteAllText("c:\\temp\\response.txt", response);
4

2 に答える 2

5

下の2行目が問題です。

string image = Convert.ToBase64String(System.IO.File.ReadAllBytes("c:\temp.png"));
request += "image=" + image;

Base 64インデックステーブルを見ると、最後の2文字(+と/)はURLセーフではありません。したがって、リクエストに追加するときは、画像をURLエンコードする必要があります。

私は.netの人ではありませんが、2行目は次のように書く必要があります

string image = Convert.ToBase64String(System.IO.File.ReadAllBytes("c:\temp.png"));
request += "image=" + URLEncode(image);

サーバー側での変更は必要ありません。文字列の一部をURLエンコードするためのシステムコールが何であるかを調べてください。

于 2010-08-20T13:49:11.790 に答える
0

2つのことを試してみることをお勧めします

  1. UTF8 に依存しているため、コンテンツ タイプに charset を含めます -

    rq.ContentType = "application/x-www-form-urlencoded; charset=utf-8"

  2. StreamReader を使用して読み取るように、StreamWriter を使用して要求ストリームに書き込みます。

于 2010-08-20T12:59:33.837 に答える