系统.Uri 的问题
本文关键字:问题 Uri 系统 | 更新日期: 2023-09-27 18:32:40
我在System.Uri
类中遇到了意外的行为。当创建System.Uri
的实例时,UrlString
有一些模式,如...
、...#
或.#
,System.Uri
会删除所有重复的.
字符。
这很奇怪,但我相信这种行为是基于 RFC 2396 的。
当我尝试从此 URL 下载 HTML 时,问题开始了:http://www.submarino.com.br/produto/1/23853463/mundo+segundo+steve+jobs,+o:+as+frases+mais+inspiradoras+...
并且System.Uri
删除所有重复的.
。由于网站无法识别"新 URL",因此它会重定向到原始 URL。然后抛出"System.Net.WebException:尝试了太多自动重定向",并且永远不会到达该页面。
如何解决此问题?
您可以使用反射来删除该特定属性。在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 报告过。