1

アプリケーションにすべての URL を「http://」で保存しました。ここで、すべての URL を調べて「https:」に置き換える必要があります。今私は持っています:

    foreach (var link in links)
        {
            if (link.Contains("http:"))
            {
                /// do something, slice or replace or what?
            }
        }

文字列を更新する最良の方法が何であるかはわかりません。これはどのように行うことができますか?

4

5 に答える 5

13

uris を扱っている場合、UriBuilderURI のような構造化データで文字列置換を行うのは良い考えではないため、おそらく使用したいと思うでしょう。

var builder = new UriBuilder(link);
builder.Scheme = "https";
Uri modified = builder.Uri;

のタイプが何であるかは明確ではありませんlinksが、linq を使用して変更された URI で新しいコレクションを作成できます。

IEnumerable<string> updated = links.Select(link => {
    var builder = new UriBuilder(link);
    builder.Scheme = "https";
    return builder.ToString();
});
于 2013-07-30T20:55:00.037 に答える
11

問題は、文字列がコレクション内にあり、文字列は不変であるため、直接変更できないことです。( ? ? ) のを指定していないので、正解が少し変わります。最も簡単な方法は、新しいリストを作成することです。linksListArray

links = links.Select(link => link.Replace("http://","https://")).ToList();

ただし、変更の数を最小限に抑え、インデックスで文字列にアクセスできる場合は、コレクションをループするだけです。

for(int i = 0; i < links.Length; i++ )
{
    links[i] = links[i].Replace("http://","https://");
}
于 2013-07-30T20:55:14.443 に答える
1

現在のコードに基づいて、link読み取り専用であるため、必要なものに置き換えられません (ここを参照してください: foreach でループ変数を変更できないのはなぜですか? )。代わりに使用for

for(int a = 0; a < links.Length; a++ )
{
    links[a] = links[a].Replace("http:/","https:/")
}
于 2013-07-30T20:54:55.593 に答える
1

http://myserver.xom/login.aspx?returnurl= http %3a%2f%2fmyserver.xom%2fmyaccount.aspx&q1=a%20b%20c&q2=c%2b%2b

クエリ文字列部分にも url を持つ URL はどうですか? それらも交換する必要があると思います。そして、URL エンコーディングのエスケープのため、これは仕事の難しい部分です。

private void BlaBla()
{
    // call the replacing function
    Uri myNewUrl = ConvertHttpToHttps(myOriginalUrl);
}

private Uri ConvertHttpToHttps(Uri originalUri)
{
    Uri result = null;
    int httpsPort = 443;// if needed assign your own value or implement it as parametric 

    string resultQuery = string.Empty;
    NameValueCollection urlParameters = HttpUtility.ParseQueryString(originalUri.Query);

    if (urlParameters != null && urlParameters.Count > 0)
    {
        StringBuilder sb = new StringBuilder();
        foreach (string key in urlParameters)
        {
            if (sb.Length > 0)
                sb.Append("&");

            string value = urlParameters[key].Replace("http://", "https://");
            string valuEscaped = Uri.EscapeDataString(value);// this is important
            sb.Append(string.Concat(key, "=", valuEscaped));
        }
        resultQuery = sb.ToString();
    }

    UriBuilder resultBuilder = new UriBuilder("https", originalUri.Host, httpsPort, originalUri.AbsolutePath);
    resultBuilder.Query = resultQuery;

    result = resultBuilder.Uri;
    return result;
}
于 2018-03-27T10:22:07.363 に答える
0

使用string.Replaceといくつかの LINQ:

var httpsLinks = links.Select(l=>l.Replace("http://", "https://");
于 2013-07-30T20:52:53.197 に答える