2012-04-03 6 views
6

System.Uriクラスがコンストラクタに渡されたエンコードされたURLをエンコード解除しないようにするにはどうすればよいですか?次のコードを考えてみましょう。 -System.UriのURLのエンコードを停止するにはどうすればよいですか?

Uri uri = new Uri("http://foo.bar/foo%2FBar"); 
Console.WriteLine(uri.AbsoluteUri); 
uri = new Uri("http://foo.bar/foo%2FBar", false); 
Console.WriteLine(uri.AbsoluteUri); 
uri = new Uri("http://foo.bar/foo%2FBar", true); 
Console.WriteLine(uri.AbsoluteUri); 

それぞれの場合、出力は "http://foo.bar/foo/bar"です。 Uriインスタンスをインスタンス化した後、Uri.AbsoluteUriが "http://foo.bar/foo%2FBar"を返すようにするにはどうすればよいですか?

答えて

4

を使用して初期化に使用する文字列を取得することはできますが、UriクラスはエスケープされたURIを生成するために使用されません。 URIを安全に再エンコードする必要がある場合は、おそらくUrlEncodeを使用しているはずです。

また、http://msdn.microsoft.com/en-us/library/9zh9wcb3.aspxに従って、Uri初期化プログラムのdontEscapeパラメータは廃止され、常に偽になります。

UPDATE: - GETting a URL with an url-encoded slash

+0

私はすでにURLENCODEを使用しています

は、誰かがこれを行う方法(ハック)を見つけようです。私の問題は、実際にはURLが(上記のスラッシュを含む)その中の文字をエスケープする可能性があるREST呼び出しを行うためにHttpWebRequestインスタンスを構築しようとしたときです。 WebRequest.Create(UrlString)オーバーロードを使用してリクエストを作成していましたが、サーバーに渡されているURLがエンコードされたスラッシュをエンコードしていないため、サーバー側エラーが発生していました。それ以上のテストでは、おそらくUriクラスの問題だったことが分かりました。 – Cleggy

+0

アップデートのリンクをご覧ください – PinnyM

+0

リンクありがとう、PinnyM。 「ひどいハック」の性質のため、私はそのルートに行くべきか、それとも私の問題を解決するために完全に別のタックを取るべきか疑問に思っています。現在、私はRESTサービスを呼び出そうとしていますが、代わりにこれをSOAPに変更する柔軟性があり、この問題も緩和する必要があります。それにもかかわらず、あなたはこの特定の問題を解決しましたので、これを正しい答えとしてマークします。 – Cleggy