方法在return语句后继续执行

时间:2011-06-03 13:56:42

标签: c# iis url url-rewriting return

我目前正在尝试解决我编写的IIS网址重写提供程序中的一个奇怪的错误。我有一个if ... else,每个块里面都有一个return语句。发生的是第一个块(if)被命中并正常执行,返回被命中但是该方法不返回并继续进入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中使用从Windows 7 x64计算机上的VS2010进行附加处理来调试它。

编辑添加:iis中的匹配模式是     (?!(共同| AJAX |脚本|上传| XML))^(\ W | \ d | - | | [&安培; = /]。)+

1 个答案:

答案 0 :(得分:3)

我猜你会因为不同的线程运行而看到奇怪的调试行为。你确定它是在else块中最终的相同请求吗? IIS将同时处理多个请求,一些用于图像,脚本,CSS等。不仅仅是页面本身。如果在方法中设置了两个断点,一个在第一个返回,另一个在else中,很可能在从return语句离开方法后,进程再次阻止请求到另一个资源内部否则声明。

在调试时使用“线程”窗口密切关注正在调试的线程。还要注意即将到来的价值,它可能会有所不同。