1

System.Uriクラスで予期しない動作が発生しています。のインスタンスSystem.Uriが作成され、 に、 または、 または などUrlStringのパターンがある場合、は繰り返されるすべての文字を削除します。......#.#System.Uri.

これは奇妙ですが、この動作は RFC 2396 に基づいていると思います。

この問題は、次の URL から HTML をダウンロードしようとしたときに発生します。インスピラドラス+ ...

そして、System.Uri繰り返されるすべての.s を削除します。Web サイトは「新しい URL」を認識しないため、元の URL にリダイレクトされます。次に、「System.Net.WebException: 試行された自動リダイレクトが多すぎます」がスローされ、ページに到達しません。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

リフレクションを使用して、その特定の属性を削除できます。Uri通話の前にこれを使用してください:

MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (getSyntax != null && flagsField != null)
{
    foreach (string scheme in new[] { "http", "https" })
    {
        UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme });
        if (parser != null)
        {
            int flagsValue = (int)flagsField.GetValue(parser);
            // Clear the CanonicalizeAsFilePath attribute
            if ((flagsValue & 0x1000000) != 0)
                flagsField.SetValue(parser, flagsValue & ~0x1000000);
        }
    }
}

以前に Connect に報告されています。

于 2012-04-29T00:47:00.200 に答える