web-dev-qa-db-ja.com

System.Uriのポートを変更する

したがって、http://localhost:1000/blah/blah/blahのようなアドレスを含むこのUriオブジェクトがあります。ポート番号を変更し、アドレスの他のすべての部分をそのままにしておく必要があります。 http://localhost:1080/blah/blah/blahである必要があるとしましょう。

Uriオブジェクトはほとんど不変なので、Portプロパティを介してポート番号にアクセスできますが、読み取り専用です。 Uriオブジェクトを別のオブジェクトとまったく同じように、ただし異なるポートで作成するための正しい方法はありますか? 「正気」とは、「正規表現や文字列操作をいじることなく」という意味です。上記の例では些細なことですが、それでも私にはワームの缶のようなにおいがします。それが唯一の方法である場合、私はそれがすでに誰かによって実装されていて、おそらくそこにいくつかのヘルパーがいることを本当に望んでいます(私は何も見つかりませんでした)

前もって感謝します。

23
Dyppl

UriBuilderクラスを検討しましたか?

http://msdn.Microsoft.com/en-us/library/system.uribuilder.aspx

UriBuilderクラスは、変更ごとに新しいUriインスタンスを作成せずに、Uriインスタンスのコンテンツを変更する便利な方法を提供します。

UriBuilderプロパティは、読み取り専用のUriプロパティへの読み取り/書き込みアクセスを提供して、変更できるようにします。

47
jglouie

riBuilder に2回投票します。私は実際にURIのポートを変更するための拡張メソッドを持っています:

public static class UriExtensions {
    public static Uri SetPort(this Uri uri, int newPort) {
        var builder = new UriBuilder(uri);
        builder.Port = newPort;
        return builder.Uri;
    }
}

使用法:

var uri = new Uri("http://localhost:1000/blah/blah/blah");
uri = uri.SetPort(1337); // http://localhost:1337/blah/blah/blah
40
alexn