Escape Fullstop перед косой чертой в строке URL - PullRequest
3 голосов
/ 12 апреля 2011

Я обнаружил странность, которую пытаюсь обойти с помощью C #, которая выполняет очистку / вмешательство в указанный URL и в результате выдает 404.

Это происходит, когда после полной остановки идет косая черта - C # и Visual Studio намерены удалить точку полной остановки.

Для Visual Studio - это нажатие клавиши Control из строки, ссылающейся на неверно сформированный URL

.

В скомпилированном C # строка преобразуется даже до получения нового URI ().

Ссылка:

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

(именно «./» в конце вызывает проблему)

Я пытался избежать как косой черты fullstop + в ASCII, так и опции 'dontEscape' в конструкторе Uri (), но пока не повезло ...

И другие мысли о том, как я могу получить эту строку, чтобы разрешить правильный URL-адрес?

Спасибо.

1 Ответ

1 голос
/ 12 апреля 2011

Это то, что я использую:

    // 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 на URL с точкой в ​​конце (.NET 2.0 Framework)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...