2015-10-27 143 views
0

我正在使用代码我没有写过使用Entity Framework的代码,这仍然有点神秘。在一个web api控制器中有下面的代码。Try Catch does not catch

try 
{ 
    sdf = sdf.sdf(sdf); 
} 
catch (Exception ex) 
{ 
    return NotFound(); 
} 

GetOrderByAlternateIdentifier抛出一个空指针异常,当一个坏的OrderID进来。这样,可暂停执行代码的GetOrderByAlternateIdentifier方法,因为不被困在错误。我会认为我上面的try catch会捕获它,所以我可以发回NotFound响应,但它不。

如何让我的try catch捕获GetOrderByAlternateIdentifier()中发生的错误?

Greg

+4

做一个网络搜索“select is not broken”。抓住没有破碎。还有其他事情正在发生,你没有告诉我们这件事;还有别的东西可以解释你正在观察的内容。 –

+0

如果'GetOrderByAlternateIdentifier'返回一个'IEnumerable',那么你可能还没有在它上面调用枚举器。当你这样做时,在try-catch之外你会得到异常。请显示更多代码。 –

+0

这个错误会出现在你的select或者方法'GetOrderByAlternateIdentifier'中的任何语句中,然后你需要将它包装在try catch中,如果它抓住了,就会把堆栈中的错误“抛出”到当前的错误。 'try catch'只能在你当前的范围内工作。 – Nikerym

回答

1

异常不停止代码。我最好猜测发生的事情是Visual Studio调试器在抛出异常时中断。有一个决定是否发生这种情况。

但是,当您不调试时,异常不会停止代码。和try...catch工作正常。它测试良好。

+0

@Johnthan Wood,你能解释为什么Exceptions不会停止代码吗?运行时异常会停止您的代码。你在谈论try/catch块吗? – bdparrish

+0

@bdparrish不,运行时异常(未处理)将退出进程,异常不会使代码停止(如暂停),它会使其停止,如终止。捕获内的代码可能会停止,但异常本身不会。 –

+0

@Jonathan Wood尽管你的正确,他的问题是(很有可能)不是从他打电话的方法中将他的执行从堆叠中抛出。不过,你的发现并不是试图解决问题,而是他的实施。 – Nikerym