在URL字符串中斜杠之前逃脱完全停止

时间:2011-04-12 12:00:45

标签: c# url-encoding

我发现了一个奇怪的问题,我正试图通过C#清理/干扰指定的URL,并给出404作为结果。

它发生在完全停止后有正斜杠的地方--C#和Visual Studio决定删除fullstop。

对于 Visual Studio ,这是从链接到格式错误的网址的字符串中按住Control键单击

编译的C#中,即使在获取新URI()之前,字符串也会被转换。

链接是:

  

http://www.mattmulholland.co.nz/Matt_Mulholland/Matt_Mulholland_-_Official_Website._Boom./rss.xml

(导致问题的最后是'./')

我试过转义ASCII中的fullstop +斜杠和Uri()构造函数中的'dontEscape'选项,但到目前为止还没有运气......

关于如何获取此字符串以允许正确的URL的其他想法?

感谢。

1 个答案:

答案 0 :(得分:1)

这就是我使用的:

    // call this line only once in application lifetime (when app starts)
    ApplyFixEndDotUrl();

    // --------------------------
    Uri testUrl = new Uri("http://www.mattmulholland.co.nz/Matt_Mulholland/Matt_Mulholland_-_Official_Website._Boom./rss.xml");
    string strUrl = testUrl.ToString();

    // --------------------------
    // -> using System.Reflection;

    public static void ApplyFixEndDotUrl()
    {
        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);

                    if ((flagsValue & 0x1000000) != 0)
                        flagsField.SetValue(parser, flagsValue & ~0x1000000);
                }
            }
        }
    }

此解决方案可在此处找到:HttpWebRequest to URL with dot at the end (.NET 2.0 Framework)