2013-03-25 68 views
0

我正在創建一個實用程序類,它將用於我的Facebook應用程序中用於通常完成的任務,例如從URL中檢索Facebook頁面ID。我不確定下面的代碼是否是拋出和捕獲異常的正確方法。有人可以請指教,謝謝。在實用程序類中拋出異常的最佳實踐

工具類:

public static class FacebookUtilities 
{ 
    public static string GetPageIDFromGraph(string pageUri, string accessToken) 
    { 
     try 
     { 
      FacebookClient client = new FacebookClient(accessToken); 
      dynamic result = client.Get(GetPageIDFromUri(pageUri), new { fields = "id" }); 
      return result.ToString(); 
     } 
     catch (FacebookOAuthException) 
     { 
      throw; 
     } 
     catch (FacebookApiException) 
     { 
      throw; 
     } 
    } 

    public static string GetPageIDFromUri(string pageUri) 
    { 
     if (pageUri.Contains('/')) 
      pageUri = pageUri.Substring(pageUri.LastIndexOf('/') + 1); 
     if (pageUri.Contains('?')) 
      return pageUri.Substring(0, pageUri.IndexOf('?')); 
     else 
      return pageUri; 
    } 
} 

程序類,只是測試: - 請注意 「輸入」 和 「輸出」 只是文本框。

private void btnGetPageID_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      output.Text = FacebookUtilities.GetPageIDFromGraph(input.Text, "Some Access Token Goes Here"); 
     } 
     catch (FacebookOAuthException ex) 
     { 
      if (ex.ErrorCode == 803) 
      { 
       output.Text = "This page does not exist"; 
      } 
     } 
     catch (FacebookApiException ex) 
     { 
      if (ex.ErrorCode == 100) 
      { 
       output.Text = "The request was not supported. The most likely cause for this is supplying an empty page ID."; 
      } 
     } 
    } 

從工具類簡單地重新拋出異常以便調用類可以捕獲它並完成需要做的事情是正確的嗎?

+0

'GetPageIdFromGraph'在捕獲這兩個異常的時候沒有用,只是爲了重新拋出它們;其他例外情況在這裏沒有發現,所以它們繼續冒泡。這是你在問什麼? 'btnGetPageID_Click'中的代碼很好,如果你只想處理定義的兩個異常,並在其他所有的異常處理。 – Tejs 2013-03-25 21:43:26

回答

1

看來你對捕捉到的異常什麼都不做 - 所以不要抓住它們。關於異常處理有很多討論,但總的來說,當你與它們有關時,或者至少使用finally來清理資源時,你應該捕獲異常。

1

既然你不處理任何方式異常,你的代碼可以只是:

public static string GetPageIDFromGraph(string pageUri, string accessToken) 
{ 
    FacebookClient client = new FacebookClient(accessToken); 
    dynamic result = client.Get(GetPageIDFromUri(pageUri), new { fields = "id" }); 
    return result.ToString(); 
} 

您應該只捕獲異常時,你可以有意義馴養它們,它看起來並不像您可以在你的GetPageIDFromGraph方法中,所以你應該傳播它們。

+0

感謝您的快速回答 - 非常有意義! – 2013-03-25 21:50:01