2010-08-20 5 views
2

Ok, le problème est que j'essaie d'envoyer un tableau d'octets via HTTP codé en base64. Bien que la chaîne que je reçois à l'autre extrémité ait la même taille que la chaîne d'origine, les chaînes elles-mêmes ne sont pas identiques, donc je ne peux pas décoder la chaîne dans le tableau d'octets d'origine.Problème lors de l'envoi d'une chaîne encodée en base64 via HTTP avec .NET

De plus, j'ai effectué une conversion de/vers base64 côté client avant d'envoyer la chaîne et tout fonctionne correctement. C'est après l'envoi que le problème se produit.

Y at-il quelque chose qui me manque? Un type de formatage particulier? J'ai essayé d'utiliser EscapeData() mais la chaîne est trop grande.

Nous vous remercions à l'avance

modifier: Code

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); 
+1

Veuillez fournir un exemple de code, ou au moins spécifier * où * vous envoyez la valeur, par ex. corps ou URL. –

+0

En outre, vous êtes conscient qu'il existe des limites de taille pour cela si vous envoyez via le paramètre GET? –

+0

Je post-it. Je vais ajouter l'extrait de code dans un peu. – mtranda

Répondre

0

Je proposerai deux choses à essayer

  1. Include charset dans le type de contenu que votre comptent sur UTF8 -

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

  2. Utilisez StreamWriter pour écrire dans un flux de requête lorsque vous utilisez StreamReader pour le lire.

5

La deuxième ligne ci-dessous est le problème.

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

Si vous regardez Base 64 index table, les deux derniers caractères (+ et /) ne sont pas URL en toute sécurité. Ainsi, lorsque vous l'ajoutez à la requête, vous DEVEZ encoder l'image.

Je ne suis pas un gars .net, mais la deuxième ligne doit être écrit quelque chose comme

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

Aucun changement nécessaire sur le côté serveur. Découvrez simplement ce que l'appel système est à l'URL encoder un morceau de chaîne.

+0

Yep, été piqué par cela avant! –

Questions connexes