web-dev-qa-db-ja.com

C#でHTTP URLを解析するにはどうすればよいですか?

私の要件は、Http URLを解析し、それに応じて関数を呼び出すことです。現在の実装では、ネストされたif-elseステートメントを使用していますが、これは最適化された方法ではないと思います。他の効率的なアプローチを提案できますか?

URLは次のようなものです。

  • server/func1
  • server/func1/SubFunc1
  • server/func1/SubFunc2
  • server/func2/SubFunc1
  • server/func2/SubFunc2
13
vijay053

System.Uri クラスを最大限に活用できると思います。 URIを入力すると、さまざまな配置でピースを引き出すことができます。

いくつかの例:

Uri myUri = new Uri("http://server:8080/func2/SubFunc2?query=somevalue");

// Get Host part (Host name or address and port). Returns "server:8080".
string hostpart = myUri.Authority;

// Get path and query string parts. Returns "/func2/SubFunc2?query=somevalue".
string pathpart = myUri.PathAndQuery;

// Get path components. Trailing separators. Returns { "/", "func2/", "sunFunc2" }.
string[] pathsegments = myUri.Segments;

// Get query string. Returns "?query=somevalue".
string querystring = myUri.Query;
41
Suncat2000

これは少し遅れた答えかもしれませんが、最近いくつかのURLを解析しようとしていることに気付き、UriSystem.Web.HttpUtilityの組み合わせを使用しました ここ 、私のURLはhttp://one-domain.com/some/segments/{param1}?param2=x....のようなものだったので、これは私がしたことです:

var uri = new Uri(myUrl);
string param1 = uri.Segments.Last();

var parameters = HttpUtility.ParseQueryString(uri.Query);
string param2 = parameters["param2"];

どちらの場合も、stringsで作業することになり、セグメントで作業するときは特に疲れることに注意してください。

4
Luiso

Suncat2000の回答の分割と文字列分割を組み合わせて、URLの興味深い機能を取得しました。ナビゲーション引数e.Parameter:として、別のページからhttps:などを含む完全なUriを渡します。

Uri playlistUri = (Uri)e.Parameter;
string youtubePlaylistUnParsed = playlistUri.Query;
char delimiterChar = '=';
string[] sections = youtubePlaylistUnParsed.Split(delimiterChar);
string YoutubePlaylist = sections[1];

これにより、GoogleAPIで使用するためのPLs__などの形式のプレイリストが取得されます。

0
Tim