29

相対URI、つまりスキームやホスト情報のないURIからクエリ文字列とフラグメントを抽出したいと思います。

偽のホスト名を持つ絶対URIに変換するよりも、これを行うためのより洗練された方法はありますか?

var relativeUri = "/dir1/dir2/file?a=b&c=d#fragment";
var uri = new Uri(new Uri("http://example.com"), relativeUri);
var path = Uri.UnescapeDataString(String.Concat(uri.Segments));
var query = uri.Query;
var fragment = uri.Fragment;
// path = "/dir1/dir2/file", query = "?a=b&c=d", fragment = "#fragment"
4

2 に答える 2

19

ホスト部分なしで作成することはできますが、これらのプロパティは絶対URIに依存しているためUri、ほとんどのプロパティはInvalidOperationException(「この操作は相対URIではサポートされていません」 )をスローします。

HttpUtility.ParseQueryString()絶対URIがないために取得できないURIのクエリ部分でのみ動作するため、ここでは実際には役に立ちません。

ですから、ハッキーに見えるかもしれませんが、new Uri(baseUri, relativeUri)コンストラクターはまさにあなたが望むことをしていると思います。私は同じことを達成するためのより良いまたはよりクリーンな方法を見つけることができないようです。

于 2012-11-26T13:40:13.857 に答える
4

私自身この問題に遭遇したのでHttpUtility.ParseQueryString、実際には文字列と「?」の後の何かを探しているだけであることがわかりました。

だから私は両方の場合(相対的および絶対的)でこれを使用しなければならないので、私は以下が非常にうまくいくようだと思います

HttpUtility.ParseQueryString(url.Split('?').Last())
于 2018-02-05T20:09:23.010 に答える