2009-05-25 24 views
11

C#でWebRequestを使用してサイトにPOSTを実行しようとしています。私が投稿しているサイトはSMSサイトで、messagetextはURLの一部です。 URLの空白を避けるため、私はHttpUtility.Encode()をURLエンコードするよう呼びます。WebRequestで「URIの形式を判別できませんでした」

しかし、私はURIFormatException入れません - 「無効なURI:URIの形式を決定することができませんでした」 - 私はこれに類似したコードを使用する場合:私が呼ぶとき

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(); 

例外が発生WebRequest.Createを()。

私は間違っていますか?

答えて

16

あなたは唯一の引数全体ではなく、URLをエンコードするので、試してみてください://および:

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(); 

はURL全体を符号化することを意味するのでしょうか?取得もエンコードされます。エンコードされた文字列は、もはや有効なURLではなくなりました。

+0

[HttpUtility]または[Server]メソッドの代わりに 'Uri.EscapeDataString()'を使うのがベストです([this post] http://stackoverflow.com/a/1148326/5838198) 。 – Siavas

1

UrlEncodeは、クエリ文字列でのみ使用する必要があります。あなたのコードの現在のバージョンは、WebRequestクラスを混乱されているURLにスラッシュとコロンをURLエンコードされ

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

:これを試してみてください。

関連する問題