方法在返回语句后继续执行
本文关键字:继续 执行 语句 返回 方法 | 更新日期: 2023-09-27 17:58:16
我目前正试图解决我编写的IIS url重写提供程序中的一个奇怪错误。我有一个如果。。。否则每个块中都有一个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=值这样的东西是为了调试目的——如果它正常工作,就会改进它!)
有什么想法吗?这似乎不是这种方法的正确行为。我正在windows 7 x64计算机上使用VS2010的附加到进程在IIS 7.5中调试它。
已编辑以添加:iis中的匹配模式为^(?!(common|ajax|Scripts|uploads|xml))(''w|''d|-|.|[?&=/])+
我猜您会看到由于不同线程运行而导致的奇怪调试行为。你确定是同一个请求在其他块中结束吗?IIS将同时处理多个请求,其中一些请求用于图像、脚本、css等,而不仅仅是页面本身。如果在方法中设置两个断点,一个在第一个return上,另一个在else中,那么在从return语句中离开方法后,进程很可能会再次阻止对else语句中不同资源的请求。
调试时,请密切注意正在使用"线程"窗口调试的线程。还要注意即将到来的价值,它可能会有所不同。