2015-10-27 102 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