2011-06-03 101 views
0

我目前正試圖解決我寫的IIS url重寫提供程序中的一個奇怪的錯誤。我有一個if ... else與每個塊內的return語句。會發生什麼是第一個塊(如果)被擊中並正常執行,返回被擊中,但該方法不會返回並繼續進入else塊。這是有問題的代碼:返回語句後繼續執行方法

public string Rewrite(string value) 
{ 
    string v = value; 
    if (v.Contains(".aspx") || v.Contains("buzz") || v.Contains("promo")) { 
     return v; 
    } else { 
     string val = ""; 
     using (DataContext db = new DataContext(cs)) { 
      var lp = db.LandingPages.FirstOrDefault(l => l.L_Url == v); 
      if (lp != null) val = "landing_page.aspx?id=" + lp.L_ID; 
     } 
     return CoalesceStrings(val, v); 
    } 
} 

(我知道有很多可以做更好的,搞什麼V =值分別用於調試目的 - 生病提高它時,它工作正常!)

有任何想法嗎?這似乎不是這種方法的正確行爲。我正在IIS 7.5中調試它,使用附加到VS2010在Windows 7 x64機器上進行處理。

編輯補充:(?!(共同| AJAX |腳本|上傳| XML))IIS中的匹配模式是 ^(\ W | \ d | - | | [?& = /])+

回答

3

我想你會看到奇怪的調試行爲,因爲不同的線程運行。你確定它是在else塊中結束的相同請求嗎? IIS將同時處理多個請求,其中一些用於圖像,腳本,CSS等,而不僅僅是頁面本身。如果在方法中設置了兩個斷點,一個在第一個返回,另一個在else內部,很可能在從return語句中離開方法後,進程再次阻止請求到另一個資源else語句。

在調試時密切關注使用線程窗口正在調試的線程。還要注意進入的價值,這可能是不同的。

+0

值是一樣的,即時按f10步驟。正則表達式應該避免任何非代碼文件。當我設置一個斷點並按下刷新時,bp只被命中一次 - 這會讓我相信它有相同的請求? – 2011-06-03 14:16:19

+0

@Tom Broad - 什麼價值正在通過和被評估?在這種情況下, – NerdFury 2011-06-03 14:42:59

+0

value =「buzz/some-url」 – 2011-06-03 16:19:25