2011-04-12 50 views
3

我發現了一個奇怪的現象,我試圖解決C#消毒/干擾指定的URL,並給出404結果。在URL字符串中斜線前斜跑全行停留

它發生在完全停止後有正斜槓的地方 - C#和Visual Studio決定刪除完整的停止。

對於的Visual Studio,這是鏈接到惡意形成的URL

編譯的C#字符串轉化,字符串控制點擊,甚至獲得新的URI()之前。

的鏈接是:

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

(這是 './' 在導致問題結束)

我試圖逃避兩個句號+斜線在ASCII和Uri()構造函數中的'dontEscape'選項,但目前爲止沒有運氣...

和其他想法如何我可以得到這個str爲了允許正確的URL?

謝謝。

+1

什麼是你逃跑的樣子?當你使用這個URL時會發生什麼:'http://www.mattmulholland.co.nz/Matt_Mulholland/Matt_Mulholland_-_ Official_Website._Boom%2E/rss.xml' – 2011-04-12 12:13:36

回答

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)