2010-09-08 12 views
-1

J'essaie de lancer un grattoir d'écran et de continuer à obtenir des problèmes viewstate invalides. Il semble que lors du téléchargement de données System.Net.WebClient ou de l'appel System.Text.UTF8Encoding.Default.GetString pour convertir le tableau d'octets renvoyé par l'appel WebClient DownloadData en chaîne - que les chaînes qui correspondent aux codes de caractères d'URL sont en cours de conversion .Url encoded characters, ViewState et byte [] tableaux oh mon

ie

chaînes d'URL de caractères codés comme% 2B sont convertis en leurs caractères normaux (+ pour% 2B).

Est-ce que cela se passe dans la classe WebClient? Est-ce la façon dont je convertis le tableau d'octets en une chaîne?

EDIT:

Sur la base de suggestions que j'ai essayé de changer à l'appel DownloadString de la classe WebClient et la chaîne résultante a converti les codes de caractères au caractère spécifique de sorte qu'il apparaît WebClient est le coupable.

EDIT 2:

Solved. En effectuant un appel à System.Web.HttpUtility.UrlEncode, j'ai pu convertir le + en% 2B avant d'envoyer la chaîne viewstate au serveur dans les requêtes suivantes. Je ne sais toujours pas où et pourquoi le problème se produisait mais le serveur attendait une chaîne viewstate qui contenait ...% 2B ... et recevait ... + ... et qui déterminait que viewstate était invalide et jeter l'exception. Bravo à Jon & Henk pour m'avoir obligé à repenser mes hypothèses.

+0

Post Peut-être que le code? J'ai du mal à imaginer comment WebClient pourrait déclencher une erreur ViewState. –

Répondre

1

Et que se passe-t-il si vous utilisez simplement WebClient.DownloadString() au lieu d'ouvrir un flux binaire?

+0

Eh bien, nous obtenons quelque part parce que la chaîne qui résulte d'un appel à DownloadString a converti les codes de caractères de sorte qu'il semble que c'est quelque chose que fait la classe WebClient. – keithwarren7

+0

@keith Je doute d'une manière ou d'une autre du fait que le client Web effectue des conversions _any_. N'avez-vous pas fait une mauvaise supposition quelque part? Encore une fois, la question pourrait faire beaucoup plus d'info (code, exemples). Et où est-ce que Viewstate entre? –

+0

Henk, en essayant de travailler un exemple qui protège les innocents ... – keithwarren7

2

Si vous utilisez System.Text.UTF8Encoding.Default alors vous êtes et non en utilisant UTF-8 - vous utilisez l'encodage par défaut pour le système. C'est équivalent à Encoding.Default, mais sous une forme plus confuse. Utilisez Encoding.UTF8 pour obtenir un encodage UTF-8 ... ou utilisez WebClient.DownloadString comme suggéré par Henk.

D'un autre côté, vous ne savez pas exactement ce que vous essayez de télécharger. Si vous essayez de télécharger geuinely données binaires alors vous ne devriez pas essayer de le convertir en une chaîne du tout.

Il serait utile que vous vous Clarifier les questions - essayer de fournir beaucoup plus de contexte sur ce qui rend les demandes, ce qui a des problèmes, etc.

+0

Appréciez le pourboire mais mon problème d'origine persiste même après ce changement. – keithwarren7

+0

@ keithwarren7: Vous n'avez toujours pas expliqué le contexte. –