2016-08-26 4 views
0

私のURLをエスケープしようとしていますが、正しく動作していません。皮肉なことに、私のMacBookに私はこの問題は、私のIDEは、それが時代遅れだと言うことですコードC#HttpClient URIが正しくエスケープされていません

Uri url = new Uri("http://www.example.com/?i=123%34", true); 
// it returns http://www.example.com/?i=123%34 which is exactly what I want. 

のこの部分を実行すると、それは私のWindowsマシン上では動作しません。これはまったく同じプロジェクトで、IDEです。そこで誰かが提案した解決策を見つけようとしました

Uri uri = new Uri(Uri.EscapeUriString("http://www.example.com/?i=123%34")); 
// this returns http://www.example.com/?i=123%2534 which is what I DONT want. 

この問題にどう対処しますか?私はウェブ全体を見渡して解決策を見つけることができません。このURLを正しくエスケープする方法を知る必要があります。上記の2番目のメソッドは、上記の最初のメソッドのようには機能しません。

私はバイオリンを経由してGETリクエストを検証し、そのすべてが実際に起こっています。

更新:再び

、私は文字列が宣言されている正確にどのようにURLを受信するサーバが必要です。私はサーバーが変換を処理したい。 %記号を%25に置き換えることはできません。それは、文字列がどのように宣言されたかを正確に受け取らなければなりません。さらに、「http://www.example.com/?i=1234」は私が望むものではありません。

+0

%34は、%34がエンコードするものである4、またはi = 1234の代わりにi = 123%34を返すことが重要です。 – Kolichikov

+0

@Kolichikovそれは私が得ることが重要ですi = 123%34と%記号の代わりに%25を使用することはできません。文字通りURI内の文字列がどのように宣言されているかは、サーバーがそれを受け取るためにどのように必要なのかです。 –

答えて

0

あなたが読んで文字列を使用して大丈夫であればHT TP:?//www.example.com/ I = 1234、あなたが試すことができ Uri url = new Uri(Uri.UnescapeDataString("http://www.example.com/?i=123%34"));

+0

私はこのような文字列では大丈夫ではないので、 "http://www.example.com/?i=123%34"のように正確に読む必要があります –

+0

これはウェブサーバーですか?そうであれば、おそらく[this](https://social.msdn.microsoft.com/Forums/sqlserver/en-US/bc3c1b8a-e70c-4595-a26e-6412d6dc3722/systemuri-class-different-escaping-behaviour-in -azure-vs-net-framework?forum = windowsazuredevelopment)が役に立つかもしれません。 – Kolichikov

+0

これはWebサーバー上にないので、私が書いているプログラムです。 –

0

問題は、Windows上のWebサーバーの構成であり、ダブルエスケープが可能です。元のURLはhttp://www.example.com/?i=123%34で、エスケープ解除されていない場合はhttp://www.example.com/?i=1234になります。

一方、WindowsのWebサーバーでは、をエスケープする代わりに、%文字を再度エスケープします。したがって、http://www.example.com/?i=123%2534になります。それがエスケープされる前に、あなたがURLに%のような文字を使用しない理由

です。

編集 -

私はパラメータがサーバー上で受信されたかを確認するには、Firefoxでは、次の2つのURLを入力しました。

http://www.example.com/?i=123%34iの値は1234です。 http://www.example.com/?i=123%2534

iの値は、サーバーが%文字を受け取らなければならない場合、それはHTTPを介してディスパッチされるようにするためにエスケープする必要があります123%34

です。文字通り、それを電線の上に送る他の方法はありません。 %文字をエスケープしないと、34と共にエスケープシーケンスとして扱われ、サーバー上で自動的に4になります。

ネットワークインスペクタはあなたの要求でエスケープされていないテキストが表示されている場合、それはあなたにそれを表示する前にURLをprettifyingているため、それはです。

+0

私はそれを理解していますが、私の場合はまだそこに%が必要です。それはウェブサーバー関連ではなく、私がクライアントサイドを書いているプログラムです。リモートサーバーが変換を処理できるように、この出力を "http://www.example.com/?i=123%34"のように正確に表示する必要があります。しかし、私が上で述べたように、%記号をパーセント記号に置き換えることは望ましくありません。私は文字通り、それを宣言したとおりに正確に文字列が必要です。 ifとandまたはbuttsはありません。解決策はありますか? –

+0

WindowsのWebサーバーでダブルエスケープをオフにします。私はそれがIISの要求フィルタリングの下に来ると思います。 –

+0

私はWebサーバーで作業していません。それは私のWindowsデスクトップに書いているプログラムです。 –

関連する問題