2013-07-23 20 views
0

我使用下面的代碼在我的控制器,當我提出一個新的條目:我怎麼能處理所有可能出現的異常,當我做EF6/SQL Server中的2012年後

// POST /api/Content/ 
    public HttpResponseMessage PostContent(Content content) 
    { 
     try 
     { 
      content.ModifiedDate = DateTime.Now; 
      _uow.Contents.Add(content); 
      _uow.Commit(); 
      var response = Request.CreateResponse<Content>(HttpStatusCode.Created, content); 
      return response; 
     } 
     catch (DbUpdateException ex) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.Conflict, ex); 
     } 
    } 

這只是拿起DbUpdateExceptions所以如果有另一種例外,那麼我認爲我需要以不同的方式處理。

任何人都可以建議我應該如何處理其他例外?

+0

嘗試分離您的圖層,以便您的DataAccess圖層可以捕獲它自己的錯誤,記錄它們並向調用者拋出友好的消息或更一般的異常。從那裏你可以捕捉到這個錯誤,並按照你的選擇做。 –

+1

http://stackoverflow.com/questions/15167927/how-do-i-log-all-exceptions-globally-for-ac-sharp-mvc4-webapi-app – qujck

+0

*任何人都可以建議我應該如何處理其他例外? *處理可以有意義的那些(例如'DbUpdateException'),否則使用[HandleErrorAttribute'](http://msdn.microsoft.com/zh-cn/library/system.web.mvc.handleerrorattribute(v =對108).aspx)的MVC。 –

回答

2

可以連續添加多個捕捉從最特別的要最一般的

try 
{ 
     content.ModifiedDate = DateTime.Now; 
     _uow.Contents.Add(content); 
     _uow.Commit(); 
     var response = Request.CreateResponse<Content>(HttpStatusCode.Created, content); 
     return response; 
} 
catch (DbUpdateException ex) 
{ 
    return Request.CreateErrorResponse(HttpStatusCode.Conflict, ex); 
} 
catch (Exception ex) 
{ 
    // do what you want 
} 
0

如果我們想從快速和骯髒的方法轉移到長但很安全的,我們可以通過以下步驟:在單獨的對象

  1. Excapsulate數據訪問和處理它在它的例外,傳遞給外界的自定義異常。您可能決定隱藏單個自定義異常下的所有數據訪問異常。

  2. (正如@Massanu指出的)連接處理程序從最特別到最一般的開始。要針對不同的例外進行適當的反應,請勿使用單個catch (Exception ex)處理程序。

  3. 如果某樣東西,其實,讓未處理的,你可以抓住它在Application_Error方法global.asaxhttp://msdn.microsoft.com/ru-ru/library/24395wz3(v=vs.100).aspx

有關於錯誤代碼由史蒂夫Macconell寫完整的書處理的好章:http://cc2e.com/

相關問題