2009-05-25 5 views
11

J'essaie d'effectuer un POST sur un site en utilisant une requête Web en C#. Le site sur lequel je poste est un site SMS et le message texte fait partie de l'URL. Pour éviter les espaces dans l'URL j'appelle HttpUtility.Encode() à l'URL l'encoder."Le format de l'URI n'a pas pu être déterminé" avec WebRequest

Mais je continue à obtenir un URIFormatException - « URI non valide: Le format de l'URI ne peut pas être déterminée » - lorsque j'utilise un code similaire à ceci:

string url = "http://www.stackoverflow.com?question=a sentence with spaces"; 
string encoded = HttpUtility.UrlEncode(url); 

WebRequest r = WebRequest.Create(encoded); 
r.Method = "POST"; 
r.ContentLength = encoded.Length; 
WebResponse response = r.GetResponse(); 

L'exception se produit quand je l'appelle WebRequest.Create().

Qu'est-ce que je fais mal?

Répondre

16

Vous ne devez coder l'argument, et non pas l'URL complète, alors essayez:

string url = "http://www.stackoverflow.com?question=" + HttpUtility.UrlEncode("a sentence with spaces"); 

WebRequest r = WebRequest.Create(url); 
r.Method = "POST"; 
r.ContentLength = encoded.Length; 
WebResponse response = r.GetResponse(); 

Encoding l'URL complète signifierait le: // et? être encodé aussi. La chaîne codée n'est alors plus une URL valide.

+0

Comme discuté dans [ce post SO] (http://stackoverflow.com/a/1148326/5838198), il est préférable d'utiliser 'Uri.EscapeDataString()' à la place des méthodes 'HttpUtility' ou' Server' . – Siavas

1

UrlEncode ne doit être utilisé que sur la chaîne de requête. Essayez ceci:

string query = "a sentence with spaces"; 
string encoded = "http://www.stackoverflow.com/?question=" + HttpUtility.UrlEncode(query); 

La version actuelle de votre code est urlencodage les barres obliques et deux points dans l'URL, ce qui est source de confusion WebRequest.

Questions connexes