背景:私は、MVCアプリケーションのいくつかのURL操作を試みています。私はクエリ文字列の値を別のものに置き換えるHtmlHelper拡張メソッドを書いています。このメソッドは現在の要求文字列を取り、Foo = 1、Foo = 1、Hello、World、2として読み取られることを避けるように、Foo = 1 & Foo = Hello%2c%20World!& Foo = 2を手動で分割します。 UriBuilderとUriを使用してURLを取得しようとします。Uriが部分的にクエリ部分をデコードするのはなぜですか?
問題:何らかの理由で、Uri.ToStringがクエリ文字列を部分的にデコードします。簡単なテストとして、私はLINQPadを解雇し、以下を実行しました:
var ub = new System.UriBuilder("http://foobar");
ub.Query = "NY%26A"; // NY&A
ub.Uri.Dump();
ub.Uri.ToString().Dump();
ub.Uri.Query.Dump();
ub.ToString().Dump();
結果は以下のとおりです。
http://foobar/?NY&A
http://foobar/?NY&A
?NY%26A
http://foobar:80/?NY%26A
私はエスケープ文字をたくさん使用している場合、それはいくつかを復号化しているため、部分的に、デコード言います所定の位置に他の人を残し:
var ub = new System.UriBuilder("http://foobar");
ub.Query = "!%40%23%24%25%5E%26*()"; // [email protected]#$%^&*()
ub.Uri.Dump();
ub.Uri.ToString().Dump();
ub.Uri.Query.Dump();
ub.ToString().Dump();
と結果:
http://foobar/[email protected]%23$%25^&*()
http://foobar/[email protected]%23$%25^&*()
?!%40%23%24%25%5E%26*()
http://foobar:80/?!%40%23%24%25%5E%26*()
質問:誰かが何が起こっているのか説明できますか?
感謝を。私はなぜそれがデコードされているのだろうか?それはURIの意味を変えるからです。私の目標は、既存のURIを受け取り、何かを変更し、URI全体を取り戻すことでした。 .NETクラスがなくても簡単にやっていましたが、何が起こっているのか理解したかったのです。 –