0

これが私のC#リストアイテムに含まれる概念です

List<string> myList1 = new List<string>();

Urls some are: 
http://www.google.com

http://www.google.com/maps

http://www.google.com/?parm=vlue

/www.google.com/

それらは現在リスト変数myList1にあります

次のような各URL要素を識別する方法はありますか

Scheme:http

host:www.google.com

path:/maps

query:?parm=value

これらの要素をboolとして設定します。これにより、trueの場合は何かを実行し、falseの場合は他の何かを実行します。

4

2 に答える 2

2

リストをURIインスタンスにします。

var uris = myList1.Select(u => new Uri(u));

http://msdn.microsoft.com/en-us/library/system.uri.aspx

これにより、Scheme や Host などのさまざまなプロパティにアクセスできるようになります。

リストにこれがあるとします(とりわけ):

http://www.google.co.uk/search.php?searchterm=a

これを最初に Uri に入れることができます:

var uris = myList1.Select(u => new Uri(u));

今、私google.comは...schemehttps

var googleUris = uris.Where(u => u.Host.Contains("google") && u.Scheme.Equals("http"));

これで、Google に送信され、https 経由でアクセスする URI しか取得できなくなりましたが、これは URI オブジェクトにも含まれているので、完全な URI パスとして戻したい場合はどうすればよいでしょうか?

var fullURIsOfGoogleUris = googleUris.Select(u => u.AbsoluteUri);

この最終的なリストは、単なる文字列 (最初に指定した完全な URI) になります。

あなたはそれを「bool」値として欲しいと言いました...まあ、これに使用できますAny()。上記の例を使用すると、これは次の 1 行になります。

bool hasGoogleUris = myList1.Select(u => new Uri(u)).Any(u => u.Host.Contains("google") && u.Scheme.Equals("http"));

上記は、そのリストにホストに含まれるURIが含まれているかどうかに応じて、trueまたは値を提供します.falsegooglehttp

于 2013-03-20T15:11:15.387 に答える
0

編集:

Arran の提案に基づくサンプル コード:

           List<string> myList1 = new List<string>() { "http://www.google.com/?parm=vlue"};

            var uris = myList1.Select(u => new Uri(u));

            foreach (var uri in uris)
            {

                //"http"
                var schema = uri.Scheme;

                //www.google.com
                var host = uri.Host;

                //"?parm=vlue"
                var query = uri.Query;
            }

さらに情報を追加します。役に立つかもしれません

Uri.IsWellFormedUriString(myURL, UriKind.RelativeOrAbsolute)

あなたの例では:

IList<string> wellFormalteUriStrings = myList1.FindAll(url => Uri.IsWellFormedUriString(url, UriKind.Absolute));

リストwellFormalteUriStringsには、 myList1 からの有効な URL 文字列のみが含まれます。

参照: MSDN

于 2013-03-20T15:15:07.673 に答える