2012-05-01 26 views
0

什麼我:全球的try-catch在asp.net頁面加載(VB在這種情況下)

  • SecureBasePage.vb它繼承SecureBasePage
  • Default.aspx(供需要登錄的網頁被繼承)

應該是什麼情況:客戶端請求Default.aspx但被重定向到登錄,因爲他沒有登錄

SecureBasePage.vb有這種構造

Public Sub() 
     If userIsAuthenticated Then 

     Else 
      Throw New LoginException() 
     End If 

End Sub 

這導致例外LoginException。現在我想讓它被一個不知何故的全局異常處理程序捕捉到,它將客戶端踢到login.aspx

我知道有一個功能Application_Error()Global.asax但在我看來,它僅花費了Server.GetLastError()和不捕獲異常,這不是一個異常處理程序。所以這個函數更有可能是允許開發者發送關於未處理異常的電子郵件。我會稱之爲'全球未處理異常處理程序'而不是'全局異常處理程序'。

有什麼我可以嘗試趕上構造函數異常拋出?

回答

0

由於所有需要登錄的頁面都將繼承SecureBasePage類,因此在那裏實現您的邏輯可能是最有意義的。只需重寫OnLoadOnPreLoad之類的頁面方法之一即可處理重定向。

我不會建議根據global.asax來處理錯誤,所以你的基類可能是最合適的地方。

編輯

根據經驗,一般情況下,你不應該使用異常來控制邏輯流。除非異常本身包含有用的日誌記錄信息,否則它可能比有益的成本更高,特別是對幾乎每個請求都要使用的邏輯。

本文的話題提供了一些有用的建議:

+0

是的,但是我爲什麼要在全球做的原因,是因爲我想我自己的異常全局了。這樣它就不會綁定到頁面,而是綁定到全局 – Highmastdon

+0

如果所有需要此邏輯的頁面都是從「SecureBasePage」繼承的,那麼它已經是全局的繼承方式。另外,生成你自己的例外不是一個好方法;自定義異常應該保留用於設計缺陷或限制。 –

+0

Oke也許最好在'SecureBasePage'中做,但是你能給我一篇文章或者一些解釋'最佳實踐'使用自定義異常的原因,以及爲什麼不以這種方式使用它,因爲我需要解釋這給我的主管。他有點堅持使用例外。 – Highmastdon