1

Uri tostring が uris を壊すことを発見したとき、それは私の心を吹き飛ばしました.... ここに例があります

これを即時モードで実行すると、次のようになります

new Uri("http://site.com?a=1&b=c%26d").AbsoluteUri

解像度

"http://site.com/?a=1&b=c%26d"

しかし

new Uri("http://site.com?a=1&b=c%26d").ToString() //string.format i believe doesn't need .ToString()

私を取得します

"http://site.com/?a=1&b=c&d"

b値は完全に壊れています。私は衝撃を受けた。私は決して使用しないのToString()ですか?これはバグのようです。しかし、この質問を書いたことで答えが得られました ( .AbsoluteUri)。しかし、多分これは誰かを助けるでしょう。

4

2 に答える 2

3

このUri.ToStringメソッドは、URI をわかりやすい方法で表示する以外には役に立ちません。

Uri.ToStringのドキュメントのコード例から:

// The following outputs "http://www.contoso.com/thick and thin.htm".
Console.WriteLine(uriAddress.ToString());

// The following outputs "HTTP://www.Contoso.com:80/thick%20and%20thin.htm".
Console.WriteLine(uriAddress.OriginalString);

この例は、ToStringメソッドがスペースを含む文字列を返すことを示しています。これは、URI で有効な文字ではありません。Uri の文字列表現は、実際の URI として使用することを意図していないことは明らかです。この事実は、おそらくドキュメントでより明確にする必要があります。

于 2012-10-20T19:42:11.853 に答える
-1

編集

私はもともと、@acidzombie24 の例の「&」記号にはエスケープが役に立たないという事実を見落としていました。できれば私の答えに反対票を投じたでしょう;-P. 仕方がないので適当に編集してみました


Uri.EscapeUriString MethodMSDN の次の文にもかかわらず、@acidzombie24 の場合には役に立たないことに注意してください。

EscapeUriString メソッドを使用して、エスケープされていない URI 文字列を Uri コンストラクターのパラメーターとして準備します。

ドキュメントは実際にメソッドの制限を示唆しています:

[Uri.EscapeUriString(stringToEscape)] メソッドは、stringToEscape にエスケープ シーケンスが含まれていないことを前提としています。


EDIT 2 4.5 をターゲットとする VS2012 WinForms アプリで @acidzombie24 の例を複製しようとしましたが new Uri("http://site.com?a=1&b=c%26d").ToString()、エスケープされたバージョンを返しました: ここに画像の説明を入力

于 2013-03-14T20:02:52.897 に答える