1

.Net の UriBuilder および Uri クラスに問題があります。UriBuilder で Uri を構築し、結果の Uri を使用したいと考えています。ただし、クエリ文字列のプラス記号を正しくエンコードすることはできませんか?

小さなコード例を次に示します。

var ub = new UriBuilder();
ub.Query = "t=a%2bc";
Console.WriteLine(ub.Uri.ToString());

この例では が得られますhttp://localhost/?t=a+cが、プラス記号はこのように %2b にエンコードされていると予想されhttp://localhost/?t=a%2bcます。そうしないと、URL を使用できません。

もちろん、代わりに文字列を作成することもできますが、可能であれば、厳密に型指定された Uri を使用することをお勧めします。

4

3 に答える 3

2

興味深いことに、これは .NET 4.5 で「修正」されたようです。

これは、.NET 4.0でのテストの結果です: (即時ウィンドウから)

? ub.Uri.ToString()
"http://localhost/?t=a+c"

しかし、.NET 4.5では:

? ub.Uri.ToString()
"http://localhost/?t=a%2bc"

これはあなたが探しているものです。

4.5にアップグレードできますか? これで問題が解決します。

アップグレードできない場合はお知らせください。回避策を探します。

于 2013-02-27T19:16:06.810 に答える
1

VS2012/.Net4.5 に更新する機会が得られるまで、Uri をラップするカスタム Uri クラスになりました。私が取り組んでいるシステムのほとんどの Uris は、Uris を新規作成することによって作成されるのではなく、代わりに Querybuilder メソッドを使用して作成されます。これは、その部分を交換して Uri の代わりに Uri2 を返すことが「簡単」であることを意味します。

public class Uri2 : Uri
{
    public Uri2(Uri uri)
        : base(uri.ToString())
    {

    }

    public override string ToString()
    {
        var s = base.ToString();
        s = s.Replace("+", "%2b");
        return s;
    }
}
于 2013-02-28T09:55:53.430 に答える