2011-06-03 99 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